SegmentFault hyperf的问题
2023-12-01T01:59:59+08:00
https://segmentfault.com/feeds/tag/hyperf
https://creativecommons.org/licenses/by-nc-nd/4.0/
如何在Hyperf中避免进程残留?
https://segmentfault.com/q/1010000044433741
2023-12-01T01:59:59+08:00
2023-12-01T01:59:59+08:00
Khada Jhin
https://segmentfault.com/u/khada_jhin
0
<p>hyperf 本地开发使用 php bin/hyperf.php server:watch 命令启动。</p><p>CTRL + C 停止后有残留进程。</p><p>如果再次执行启动命令就会显示端口被占用。</p><p>查不到合适的办法。</p>
请问hyperf如何像Thinkphp框架那样通过HttpResponseException那种捕获异常输出到客户端?
https://segmentfault.com/q/1010000043884942
2023-06-10T04:37:56+08:00
2023-06-10T04:37:56+08:00
打飞机的猪猪侠
https://segmentfault.com/u/dafeijidezhuzhuxia
0
<p>请问hyperf如何像Thinkphp框架那样通过HttpResponseException那种捕获异常输出到客户端?</p><p>如:我需要返回给客户端的Json是<strong>[code=> 1, data=> ['username'=> '张三'], 'msg'=> 'success']</strong>这种格式的,如何在hyperf当中通过像Thinkphp框架那样直接从HttpResponseException捕获异常输出到客户端,而<strong>不是</strong>还需要 <strong>return $this->response->json([code=> 1, data=> ['username'=> '张三'], 'msg'=> 'success'])</strong>这种格式输出;</p>
Laravel 使用 with 关联模型如何起别名
https://segmentfault.com/q/1010000042080345
2022-07-07T10:32:39+08:00
2022-07-07T10:32:39+08:00
Leon
https://segmentfault.com/u/leon_59703b823fd94
0
<p>我现在关联了一个 goods 模型,需要根据模型里面的 type 属性来区分归属到哪个字段下:</p><pre><code>$res = MealModel::query()
->with(['goods' => function ($query) {
$query->where('type', 1);
}])
->with(['goods' => function ($query) {
$query->where('type', 2);
}])
->find($id);</code></pre><p>type = 1 的归纳到 goods1 下面,type = 2 的归纳到 goods2 下面,但是 with 不像 withCount 一样可以起别名,因此造成第二个 with 的 goods 覆盖了前面的 with。<br>写两个 SQL 的话就有点多余了,请问有解决方案吗?</p>
docker 安装 Hyperf
https://segmentfault.com/q/1010000042050513
2022-06-29T18:56:32+08:00
2022-06-29T18:56:32+08:00
白穹雨
https://segmentfault.com/u/baiyu_5e8165d8c9fd8
0
<p>今天在虚拟机上用docker安装了一个 Hyperf框架,启动时报了一下问题,请问这是啥情况呢?<br><img src="/img/bVc0Bqd" alt="image.png" title="image.png"></p>
hyperf-v如何访问内网
https://segmentfault.com/q/1010000041266767
2022-01-11T19:53:14+08:00
2022-01-11T19:53:14+08:00
北风厉兮肃伶伶
https://segmentfault.com/u/wutongchulian
0
<p>我们上网Win10使用的是WiFi,虚拟机用的是Linux,主机是Windows,我们要访问以太网内部网络,通过网线插入Win10,添加路由route add,这时Win10是可以访问内部网络的,但是虚拟机访问不了。请教下使用桥接或NAT的话,虚拟机如何访问到以太网内部,注意以太网是不能连接互联网的。</p>
如何使用swoole+redis实现分布式锁
https://segmentfault.com/q/1010000041247761
2022-01-08T17:42:41+08:00
2022-01-08T17:42:41+08:00
长脚的海星星
https://segmentfault.com/u/changjiaodehaixingxing
0
<p>已知redis实现分布式锁可以使用<code>setnx</code>实现, 但是问题在于设定一个过期时间。假如设定过期时间为<code>10s</code>,有可能在超过<code>10s</code>后work还没有退出,就会造成锁被释放掉。<br> 所以swoole有没有类似于java<code>redission</code>这种实现分布式锁的第三方包。 如果没有,怎么解决上述的问题呢?</p>
hyperf 配置中心使用ectd获取不到值
https://segmentfault.com/q/1010000041190138
2021-12-28T10:54:00+08:00
2021-12-28T10:54:00+08:00
reskininy
https://segmentfault.com/u/reskininy
0
<p>启用了config-center配置中心。配置如下</p><pre><code class="php">return [
'enable' => (bool) env('ENABLE_CONFIG_CENTER', false),
'driver' => env('CONFIG_CENTER_DRIVER', 'etcd'),
'mode' => env('CONFIG_CENTER_MODE', Mode::PROCESS),
'drivers' => [
'etcd' => [
'driver' => Hyperf\ConfigEtcd\EtcdDriver::class,
'packer' => Hyperf\Utils\Packer\JsonPacker::class,
// 需要同步的数据前缀
'namespaces' => [
'/hb',
],
// `Etcd` 与 `Config` 的映射关系。映射中不存在的 `key`,则不会被同步到 `Config` 中
'mapping' => [
'/hb/app/ttl' => 'hb.app.ttl',
'/hb/app/mode' => 'hb.app.mode'
],
// 配置更新间隔(秒)
'interval' => 5,
'client' => [
'uri' => 'http://127.0.0.1:2379',
'version' => 'v3beta',
'options' => [
'timeout' => 10,
],
],
],
],
];</code></pre><p>通过etcdctl增加配置</p><pre><code class="shell">
[root@bogon ~]# etcdctl put /hb/app/ttl 1800
OK
[root@bogon ~]# etcdctl put /hb/app/mode 'fast'
OK
[root@bogon ~]# etcdctl put /hb/app/mode "fast"
OK
[root@bogon ~]# etcdctl put /hb/app/mode 1
OK
[root@bogon ~]# etcdctl put /hb/app/mode 'fast'
OK
[root@bogon ~]# etcdctl put /hb/app/mode "fast"
OK
</code></pre><p>获取</p><pre><code class="php">
$ttl = config('hb.app.ttl');
$mode = config('hb.app.mode');
return ['mode' => $mode, 'ttl' => $ttl, 'config' => $this->config];</code></pre><p>结果,数值类型的获取得到,string的为null????</p><pre><code class="json">{
"mode": null,
"ttl": 1800,
"config": {}
}</code></pre><p>请问这是为什么???etcdctl get是可以正常取得到值的</p>
hyperf重启时候AMQP会报异常
https://segmentfault.com/q/1010000041175494
2021-12-24T17:12:05+08:00
2021-12-24T17:12:05+08:00
reskininy
https://segmentfault.com/u/reskininy
0
<p>两种方式;</p><ul><li>通过systemctl 脚本启动重启hyperf</li><li>通过 php bin/hyperf server:watcher</li></ul><p>发现重启的时候总会报异常,如下:</p><pre><code>[WARNING] Recv loop broken. The reason is PhpAmqpLib\Exception\AMQPConnectionClosedException: Broken pipe or closed connection in /data/web/website/hyperf-skeleton/vendor/php-amqplib/php-amqplib/PhpAmqpLib/Connection/AbstractConnection.php:571
Stack trace:
#0 /data/web/website/hyperf-skeleton/vendor/hyperf/amqp/src/AMQPConnection.php(225): PhpAmqpLib\Connection\AbstractConnection->wait_frame()
#1 /data/web/website/hyperf-skeleton/vendor/hyperf/utils/src/Functions.php(274): Hyperf\Amqp\AMQPConnection->Hyperf\Amqp\{closure}()
#2 /data/web/website/hyperf-skeleton/vendor/hyperf/utils/src/Coroutine.php(62): call()
#3 {main}
</code></pre><p>看了源码好像是因为服务关闭了,导致mq服务端关闭了连接,如何处理?</p>
hyperf-process进程退出后没有自启
https://segmentfault.com/q/1010000041095314
2021-12-10T09:47:00+08:00
2021-12-10T09:47:00+08:00
siwa
https://segmentfault.com/u/siwa008
0
<p>hyperf 2.1+, php 7.3+, swoole 4.5+<br>process定义如下,默认随服务启动:</p><pre><code class="php"><?php
namespace App\Process;
use Hyperf\Process\Annotation\Process;
/**
* @Process(name="filter_shjysl")
*/
class FilterShjyslProcess extends FilterProcess
{
public $name='filter_shjysl';
}</code></pre><p>发现process进程退出后没有自启,手动重启hyperf服务后进程filter_shjysl才重新启动</p><p><img src="/img/bVcWAU9" alt="image.png" title="image.png"></p><p>程序有个定时重启机制,每隔一段时间就break退出while循环,我的疑问,为什么这里process进程不会自启呢?</p><pre><code class="php">while (ProcessManager::isRunning()) {
...
if (‘需要重启’) {
break;
}
}
sleep(5);</code></pre>
初学 hyperf,不会配置ssl
https://segmentfault.com/q/1010000040657755
2021-09-09T15:39:44+08:00
2021-09-09T15:39:44+08:00
skystars
https://segmentfault.com/u/skystarslgd
0
<p>初学 hyperf,请问群里各位前辈,怎么配置才能正确访问<a href="https://link.segmentfault.com/?enc=YAjvnLFkR8biJJEUvVg6AQ%3D%3D.ZYk7hfXoPRPOROj0pIj4k6YWwsqoAuIMQt66a3d%2B%2FJ4%3D" rel="nofollow">https://127.0.0.1:9501</a></p>
工厂流水线追踪解决思路(主要是动态表)
https://segmentfault.com/q/1010000040396290
2021-07-24T06:05:06+08:00
2021-07-24T06:05:06+08:00
supine_win
https://segmentfault.com/u/supine
0
<h2>需求</h2><p>BS结构<br>以工厂做类比</p><ul><li>产线 -> 工序 -> 工序参数</li><li><p>工序参数</p><ul><li>不同的值类型</li><li>不同类型 比如范围 值 参考对比 属于一个类型等的关系</li></ul></li><li><p>工序</p><ul><li>多种,在创建产线时,自由排列组合</li><li>并为产线附加对应的参数</li></ul></li><li><p>产线</p><ul><li>创建多个/并附带产线一级的一些参数</li><li>根据之前设置的工序,和工序参数创建</li></ul></li><li><p>产品</p><ul><li>由产线决定大类</li><li>由产线内全部工序 工序参数 决定产品型号</li></ul></li><li><p>生产</p><ul><li>按需写入表(生成的表) 记录生产追踪数据(具体某个产品)</li><li></ul></li><li><p>其他功能</p><ul><li>生产统计,即使和按需</li><li>产品优,良,报废等处理</li><li>其实就是对 数据的结构有点要求 要能精准得搜索且不影响生产</li></ul></li></ul><h2>我的解决思路</h2><ul><li>由go写管理端 纯粹是为了试试go</li><li>由hyperf写生产端</li><li><p>在管理端选择好后生成</p><ul><li>hyperf所需文件,数据库表 并启动服务</li><li>1产线对应1服务</li><li>参数改动重启服务并重载配置</li></ul></li><li><p>生产端通过 grpc or jsonrpc返回次产线的所有配置参数数据生成对应的产品型号记录</p><ul><li>供具体型号的产品选择用到的</li><li>即工序级工序参数</li></ul></li></ul><h2>问题</h2><ul><li>有更加优秀的姿势吗</li><li>暂时是这样想的,是否可以提供你可能想到问题</li><li>这种动态的表格,是不是没有好的解决方式啊</li><li>一般大厂类似需求应该是重写个服务,慢慢退出线上老服务来实现的吧</li><li>还有就是统计数据</li></ul>
hyperf+grpc响应
https://segmentfault.com/q/1010000040220510
2021-06-22T17:53:48+08:00
2021-06-22T17:53:48+08:00
iepngs
https://segmentfault.com/u/iepngs
0
<p>各位大佬好,请教一个问题,有没有办法在hyperf框架里面,建立一个exception类,让它可以在controller里面抛出异常的时候直接响应grpc的请求?</p>
hyperf框架里的 make 和 new 有什么区别?
https://segmentfault.com/q/1010000040016454
2021-05-17T22:54:59+08:00
2021-05-17T22:54:59+08:00
hxd_
https://segmentfault.com/u/hxd_
0
<p>求详细点的解答,至今没想清楚</p>
Hyperf框架中 只有Worker0内存占有过大需要怎么排查。 dispatch_mode 模式是1 轮循模式。
https://segmentfault.com/q/1010000039680613
2021-03-21T09:50:00+08:00
2021-03-21T09:50:00+08:00
冰冰
https://segmentfault.com/u/bingbing_595d92e4a6347
0
<p>Hyperf框架中 只有Worker0内存占有过大需要怎么排查。 dispatch_mode 模式是1 轮循模式。 自定义进程获取数据 发送请求给HttpServer接口。 接口内部都是 协程 中具体处理逻辑。 不需要返回值。 并发很高时,内存飙升。 有用到静态全局对象。对象数组中的key是指定的。</p><p><img src="/img/bVcQETJ" alt="image.png" title="image.png"></p><p>我想知道这样的问题 我该怎么去排查。</p>
如何在不同服务中共用一套model层
https://segmentfault.com/q/1010000024540955
2020-09-22T11:15:06+08:00
2020-09-22T11:15:06+08:00
ezreal_rao
https://segmentfault.com/u/ezreal_rao
0
<p>目前我们有四套系统,两套<code>laravel</code>框架写的,两套<code>hyperf</code>框架写的。共用一个数据库,导致的一个问题就是同一个<code>Model</code>类要在四个服务中写一遍,很是麻烦和繁琐,请问有什么方案可以解决这个问题吗?谢谢。<br><code>hyperf</code>和<code>laravel</code>都用的是<code>Eloquent ORM</code>。所以兼容问题还是可以解决的。<br>目前服务运行采用的是<code>k8s</code>+<code>docker</code>的方案。</p>
hyperf 从数据库中取出的数据 无法遍历修改里面的值
https://segmentfault.com/q/1010000037516349
2020-10-18T21:41:47+08:00
2020-10-18T21:41:47+08:00
杨有财
https://segmentfault.com/u/isdaji
0
<ul><li>进行数据遍历修改了 status和is_admin两个值</li></ul><pre><code> $resUser = Db::table('admin')->get();
foreach ($resUser as &$item) {
$item['status'] = adminStatusType($item['status']);
$item['is_admin'] = '管理员';
}
return $resUser;</code></pre><ul><li>但是结果还是没有改变<br><img src="/img/bVcHzSe" alt="image.png" title="image.png"></li></ul>
hyperf关于session的疑问
https://segmentfault.com/q/1010000027082128
2020-10-06T22:57:56+08:00
2020-10-06T22:57:56+08:00
杨有财
https://segmentfault.com/u/isdaji
0
<p>描述:在不同方法中无法获取session的值</p><p><img src="/img/bVbZNsE" alt="image.png" title="image.png"></p><p>比如在settest方法中设置了session,但是在test获取不到<br><img src="/img/bVbZNsF" alt="image.png" title="image.png"></p>
hyperf的Str扩展有static静态变量,这样会造成内存泄漏吗?
https://segmentfault.com/q/1010000024579037
2020-09-25T09:15:09+08:00
2020-09-25T09:15:09+08:00
搞怪者
https://segmentfault.com/u/gaoguaizhe
0
<p>你好,我在看hyperf的Str扩展时候,发现Str类有类全局静态变量,但是swoole文档说明使用 <code>static</code> 关键词声明的类静态变量、函数静态变量时,swoole是不会回收内存的。</p><p>请问这样会造成内存泄漏吗,不会的话hyperf能否直接使用laravel的illuminate/support,因为我想使用illuminate/support里面的Str:uuid生成uuid主键。</p><p>我看了下hyperf的Str类,里面有说过是直接引用了laravel的illuminate/support,但是我很好奇为什么不直接把Str:uuid这个方法也引入进来。</p>
hyperf excel导出如何实现
https://segmentfault.com/q/1010000023656104
2020-08-17T14:07:12+08:00
2020-08-17T14:07:12+08:00
割指
https://segmentfault.com/u/gezhi
0
<p>如题,需要要导出.xlsx后缀的表格。谢谢各位</p>
swoole 生命周期 如何定义常驻内存的对象
https://segmentfault.com/q/1010000023340434
2020-07-22T21:54:32+08:00
2020-07-22T21:54:32+08:00
sowork
https://segmentfault.com/u/sowork
0
<ol><li>swoole生命周期官方文档 <code>https://wiki.swoole.com/wiki/page/354.html</code>
</li></ol>
<pre><code class="php">
class Test{
private $http;
// 程序全局区变量
public $param1 = 0;
// 程序全局区变量
public $param2 = 0;
public $param3 = 0;
public function createTCPServer() {
$this->http = new Swoole\Server("0.0.0.0", 18306);
$this->http->set([
'worker_num' => 2,
]);
$this->http->on('workerStart', function ($server, $worker_id) {
var_dump("workerStart" . $worker_id);
++$this->param2;
});
$this->http->on('connect', function ($serv, $fd){
++$this->param3;
var_dump("接受到请求,param3目前值为:" . $this->param3);
});
$this->http->on('receive', function (swoole_server $server, int $fd, int $reactor_id, string $data){
var_dump("param1:" . ++$this->param1);
var_dump("param2:" . ++$this->param2);
var_dump("param3:" . $this->param3);
var_dump($a);
});
$this->http->start();
}
public function createHttpServer() {
$this->http = new Swoole\Http\Server("0.0.0.0", 18307);
$this->http->set([
'worker_num' => 2,
'task_worker_num' => 0,
'max_request' => 50,
'dispatch_mode' => 1,
]);
$this->http->on('workerStart', function ($server, $worker_id) {
var_dump("workerStart" . $worker_id);
});
$this->http->on('request', function ($request, $response){
var_dump("param1:" . ++$this->param1);
var_dump("param2:" . ++$this->param2);
var_dump("param3:" . $this->param3);
});
$this->http->start();
}
}
(new Test())->createTCPServer();
</code></pre>
<h4>疑问</h4>
<ul>
<li>param1 param2 param3这三个属性应该是 <code>程序全局区对象</code> 吧</li>
<li>如何定义一个 <code>进程全局期对象</code> ,并且在其他地方访问?</li>
<li>如何定义一个 <code>会话期</code> 对象,比如在onConnect定义,在onReceive访问?</li>
<li>如何定义一个 <code>请求期</code> 对象,比如在onReceive定义,在onClose访问?</li>
</ul>
hyperf + intervention/image 协程组件
https://segmentfault.com/q/1010000022731021
2020-05-24T20:18:47+08:00
2020-05-24T20:18:47+08:00
搞怪者
https://segmentfault.com/u/gaoguaizhe
0
<p>你好,我最近的项目需要用到intervention/image做图片处理,但是我不是很清楚该如何判断intervention/image是否符合hyperf。如果不符合,请大家指点一下我怎么修改intervention/image的思路,以至于可以满足hyperf的标准。谢谢。</p>
swoole_tracker + hyperf检测内存泄露
https://segmentfault.com/q/1010000022722332
2020-05-23T09:38:06+08:00
2020-05-23T09:38:06+08:00
搞怪者
https://segmentfault.com/u/gaoguaizhe
0
<p><img src="/img/bVbHvh3" alt="图片.png" title="图片.png"></p>
<p>大家好,这是我用swoole_tracker检测接口使用情况,这里的泄露是库文件导致的,我个人觉得这个是因为这些文件常驻内存的原因,但不是很确定。请问这个是正常现象吗?</p>
phpstorm调试虚拟机centos上的docker
https://segmentfault.com/q/1010000021908155
2020-03-04T10:19:48+08:00
2020-03-04T10:19:48+08:00
菜问
https://segmentfault.com/u/nixi8
0
<p>php的swoole框架hyperf运行在虚拟机上的docker,然后phpstorm运行在windows上。除了使用热更新组件外,有没有什么更方便的调试方法?</p>
swoole重启问题
https://segmentfault.com/q/1010000021735456
2020-02-12T22:48:29+08:00
2020-02-12T22:48:29+08:00
傻梦兽0
https://segmentfault.com/u/shamengshou0
1
<p>在访问量比较大的程序中,如果使用重启服务的话,会导致一些访问出错,请问这种情况下。<br>比如一个请求正在处理中,可是因为重启的缘故,可能导致请求处理一半的数据写到数据中出现数据错误的问题。<br>项目用的是hyperf,请问有什么好的解决方案吗?</p>
php如何优雅的处理api中npe的问题
https://segmentfault.com/q/1010000021251507
2019-12-10T22:13:30+08:00
2019-12-10T22:13:30+08:00
长脚的海星星
https://segmentfault.com/u/changjiaodehaixingxing
0
<p>跟java对接api。java那边序列化后有些为空的字段就直接不存在json内。比如有值的情况</p>
<pre><code class="json"> {
"data":{
"type":"xxx",
"title":"xxx",
"child":{
"type":"xxx",
"title":"xxx",
}
},
"result":"success"
}</code></pre>
<p>没有值的情况:</p>
<pre><code class="json">{
"result":"success"
}</code></pre>
<p>没有指定情况下连data丢不存。如何优雅的处理这种npe问题,网上找不到json转实体类php的工具。</p>
宝塔搭建的环境, 部署Hyperf后 大家用什么管理 hyperf
https://segmentfault.com/q/1010000020965075
2019-11-11T11:58:27+08:00
2019-11-11T11:58:27+08:00
阳阳vip
https://segmentfault.com/u/yangyangvip
2
<p>宝塔搭建的环境, 部署Hyperf后 大家用什么管理 hyperf?</p>