首页
下载
文档
社区
视频
捐赠
源代码
赞助商
AOT 编译器
AI 助理
商业产品
PHP AOT 原生编译器
Swoole-Compiler 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
请教关于运行多个swoole实例的问题
在实际应用中,我想同时运行2个swoole实例(比如swoole_http_server 与tcp_server)。 结果发现swoole_server只能单例运行,按照手册指导,采用$worker->exec来运行多个实例, 也不行,只会启动第一个。 摘取代码如下: $workerAr = array('/data/wwwroot/tcp_Server.php', '/data/wwwroot/http_Server.php'); $process = new swoole_process(function($worker) use ($workerAr){ for($i=0; $i<count($workerAr); $i++ ) $worker->exec('/usr/local/php/bin/php',array($workerAr[$i])); }, false); $pid = $process->start(); swoole_process::wait(); //只会运行第一个tcp_server,我用的是 swoole 2.0.10 //---------------------------------------------------------------------------------- 这个问题,困扰了好几天了,希望能得到指点,多谢!
发布于7年前 · 6 次浏览 · 来自
提问
木
木叶一帆
在实际应用中,我想同时运行2个swoole实例(比如swoole_http_server 与tcp_server)。 结果发现swoole_server只能单例运行,按照手册指导,采用$worker->exec来运行多个实例, 也不行,只会启动第一个。 摘取代码如下: $workerAr = array('/data/wwwroot/tcp_Server.php', '/data/wwwroot/http_Server.php'); $process = new swoole_process(function($worker) use ($workerAr){ for($i=0; $i<count($workerAr); $i++ ) $worker->exec('/usr/local/php/bin/php',array($workerAr[$i])); }, false); $pid = $process->start(); swoole_process::wait(); //只会运行第一个tcp_server,我用的是 swoole 2.0.10 //---------------------------------------------------------------------------------- 这个问题,困扰了好几天了,希望能得到指点,多谢!
赞
0
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
登录
后参与评论
评论
2019-07-18
_
_放开那个锅让我来
经过折腾一番,发现swoole_process的$worker->exec(); 无法运行多个server实例, 希望swoole能改进这个环节! 最后还是用pcntl_exec();来实现,一键控制启动多个server,可是少了进程间通信功能! $worker->exec('/usr/local/php/bin/php',$tcp_server.php); -- //会运行,只能运行一个 $worker->exec('/usr/local/php/bin/php',$ws_serv
赞
0
回复
2019-07-18
c
cloudk
无奈!还是要安装 pcntl 扩展! 我真的很不喜欢一个系统安装太多的扩展! 就好比:一个英俊的男孩,穿一件飘逸的白色上衣,帅吧,轻松自如! 你现在把春、夏、秋、冬四个季节的衣服全给他穿上,他还帅吗? 一点不帅, 行动不便,还很丑! 所以千万别给你的系统装太多那些所谓无所不能的扩展!把你的系统搞的不伦不类!
赞
0
回复
2019-07-20
k
ko
貌似你错误理解了 swoole_process->exec() 的功能用法,它是对 exec 系统调用的封装,跟 PHP 的 exec() 完全不同。 swoole_process->exec() 一旦调用,当前进程就脱胎换骨,完全变成另外一个程序了,所以你程序里的循环根本没有执行完。 正确的用法是创建多个 swoole_process 对象(也就是创建多个子进程),在每个子进程里分别执行 swoole_process->exec()。
赞
0
回复
2019-07-20
G
Goular
非常感谢您的赐教,按照您的指教,可以使用了,感谢! 确实是我理解错了,我按照php的pcntl用法来使用swoole_process->exec();所以无法循环。
赞
0
回复