首页
下载
文档
社区
视频
捐赠
源代码
赞助商
AOT 编译器
AI 助理
商业产品
PHP AOT 原生编译器
Swoole-Compiler 代码加密器
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();则一切正常运行。
发布于8年前 · 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
回复