workerman 推送消息出现阻塞

test123456

按官网例子写的推送给设备端消息,运行一段时间后,
$client = stream_socket_client('tcp://127.0.0.1:5678', $errno, $errmsg, 1);
fwrite($client, json_encode($data)."\n");
$res = fread($client, 8192);

使用平台为LINUX ,调试发现这个推送消息给设备会出现阻塞,具体原因目前没查到,状况为心跳正常,但是推送数据给设备端,返回超时,60秒都不能返回推送成功数据,导致后面一直运行不了,重启进程服务,正常,所以想知道是什么问题引起的,需要怎么去解决,查看了LINUX是SOCKET连接数设置是6万多,所以应该不是端口连接数受限制引起的

阅读 750
8个回答

我是厂长

这问题我也遇到过, 好像确实是有点延迟,通过肉眼感受

  • 暂无评论
walkor

下次遇到这个问题运行 php start.php status截图下,截图截全,不要截图部分。

如果status里有进程出现busy状态,参考 http://doc.workerman.net/debug/busy-process.html 定位。

参考手册 http://doc.workerman.net/appendices/kernel-optimization.html 优化linux内核,并安装event扩展(超过1000连接event扩展是必须的)。

还有看下系统负载是否正常。负载高的话也会延迟。

  • 我是厂长 2021-03-31

    不会是进程busy情况, 因为就一个链接, 我是通过gateway, 通过json协议,我的使用场景是, 当用户支付钱之后,然后在回调方法里面 主动推送数据给停车场的闸机, 让其开门, 但是就是出奇的慢,虽然后来也不了了之了, 但是当时试验确实很慢

  • walkor 2021-03-31

    估计你没给 stream_socket_client 返回数据,stream_socket_client 一直fread等数据,所以一直等待

test123456

event扩展扩展已经安装了,linux内核也已经优化了,全部是按手册上去优化和安装的,但是$client = stream_socket_client('tcp://127.0.0.1:5678', $errno, $errmsg, 1);推送消息给到设备,只要设备连接数超过1024,推送就会一直卡住,推送不出去,打印1234端口和设备的心跳,没有卡顿,所以不知道现在这个情况要怎么处理

  • walkor 2021-11-19

    运行 ulimit -n 截图
    php start.php status 截图

test123456


已上传图片

  • walkor 2021-11-19

    event扩展没安装成功,用的是select,最高1024个连接。

test123456

event扩展没安装成功,用的是select,最高1024个连接
但是我确实是按手册上的去装的呀,如果安装成功了,会是一个怎么样的显示呢

  • 暂无评论
test123456

event扩展没安装成功,用的是select,最高1024个连接
但是我确实是按手册上的去装的呀,如果安装成功了,会是一个怎么样的显示呢,就你说的select那个位置
我现在上传一个我按命令找到的event扩展的图片

  • 暂无评论
walkor

status 里 显示 event-loop:\Workerman\Events\Event 说明使用了event扩展。

event扩展安装成功后要restart重启workerman才能生效,reload不生效

  • 暂无评论
test123456

重启后,可以了,谢谢

  • 暂无评论