首页
下载
文档
问答社区
视频
捐赠
源代码
AI 助理
赞助商
CRMEB
Apipost
腾讯云
微擎
禅道
51Talk
商业产品
Swoole AI 智能文档翻译器
Swoole-Compiler PHP 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
pipe read blocking
{{{php $http = new swoole_http_server("127.0.0.1", 9501); $http->set([ 'worker_num' => 1, 'daemonize' => false, ]); $p = new swoole_process(function ($p) { $p->name('foo'); swoole_event_add($p->pipe, function ($pipe) use($p) { echo 'start: read'; $m = $p->read(); echo "recv< $m\n"; }); }); $http->on('request', function ($request, $response) use($p) { $response->end("<h1>Hello Swoole. #".rand(1000, 9999)."</h1>"); swoole_timer_tick(1000, function() use($p) { $msg = time(); $p->write($msg); echo "send> $msg\n"; }); }); $http->addProcess($p); $http->start(); }}} PHP Version: 7.1.0 Swoole Version: 1.9.1 韩老师, 上述代码启动了一个http server(不妨叫http)和一个后台进程(不妨叫foo)。foo进程会监听pipe,当有数据写入时将数据打印出来。http进程收到http请求后会启动一个定时器,每隔一秒向foo进程的pipe写入数据。 问题是定时器可以正常写入,但是foo进程只会输出一次'start: read',并阻塞在$m = $p->read();处。 如果将上述代码中的$http->addProcess($p);换成$p->start();则一切正常运行。
发布于6年前 · 0 次浏览 · 来自
提问
f
fakebody
{{{php $http = new swoole_http_server("127.0.0.1", 9501); $http->set([ 'worker_num' => 1, 'daemonize' => false, ]); $p = new swoole_process(function ($p) { $p->name('foo'); swoole_event_add($p->pipe, function ($pipe) use($p) { echo 'start: read'; $m = $p->read(); echo "recv< $m\n"; }); }); $http->on('request', function ($request, $response) use($p) { $response->end("<h1>Hello Swoole. #".rand(1000, 9999)."</h1>"); swoole_timer_tick(1000, function() use($p) { $msg = time(); $p->write($msg); echo "send> $msg\n"; }); }); $http->addProcess($p); $http->start(); }}} PHP Version: 7.1.0 Swoole Version: 1.9.1 韩老师, 上述代码启动了一个http server(不妨叫http)和一个后台进程(不妨叫foo)。foo进程会监听pipe,当有数据写入时将数据打印出来。http进程收到http请求后会启动一个定时器,每隔一秒向foo进程的pipe写入数据。 问题是定时器可以正常写入,但是foo进程只会输出一次'start: read',并阻塞在$m = $p->read();处。 如果将上述代码中的$http->addProcess($p);换成$p->start();则一切正常运行。
赞
0
分享
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
评论
2018-04-26
九
九天
底层的BUG,请升级至`1.9.3`
赞
0
回复
微信公众号
热门内容
暂无回复的问答
- CodeGalaxy K3s 轻量集群节点之间如何实现负载均衡
- 关于openssl CURL WARNING swSSL_connect: SSL_connect(fd=69) failed. Error: error:141A318A:SSL routines:tls_process_ske_dhe:dh key too small[1|394]
- 多个模型如何进行事务异常回退?
- websocket开启wss报错
- 协程tcp服务器如何使用多进程?recv()方法接收信息,打印出来的pid一直是同一个。没用使用到多进程啊。