首页
下载
文档
社区
视频
捐赠
源代码
赞助商
AOT 编译器
AI 助理
商业产品
PHP AOT 原生编译器
Swoole-Compiler 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
swoole_process 在创建子进程时为什么拿不到rabbitmq连接资源符呢?
{{{php /** * Created by IntelliJ IDEA. * User: winfan * Date: 16/4/10 * Time: 下午7:34 */ error_reporting(E_ALL^E_NOTICE); date_default_timezone_set('Asia/Shanghai'); require_once __DIR__.'/../../vendor/autoload.php'; use Config\Config; $workers = array(); $worker_num = 3;//创建的进程数 for($i=0;$i<$worker_num ; $i ){ $process = new swoole_process('process',false,2); $pid = $process->start(); $process->mq['conn'] = new AMQPConnection(); $process->mq['conn']->setHost(Config::$mq['nodes'][0]['amqp_host']); $process->mq['conn']->setLogin(Config::$mq['nodes'][0]['amqp_user']); $process->mq['conn']->setPort(Config::$mq['nodes'][0]['amqp_port']); $process->mq['conn']->setPassword(Config::$mq['nodes'][0]['amqp_pass']); $process->mq['conn']->connect(); $process->mq['channel'] = new AMQPChannel($process->mq['conn']); $process->mq['exchange'] = new AMQPExchange($process->mq['channel']); $process->mq['exchange']->setType(AMQP_EX_TYPE_DIRECT); $process->mq['exchange']->setName(Config::MQ_EXCHANGE_NAME); $process->mq['exchange']->setFlags(AMQP_DURABLE); $process->mq['exchange']->declareExchange(); $process->mq['queue'] = new AMQPQueue($process->mq['channel']); $process->mq['queue']->setName(Config::REQ_TVINFO_HOME); $process->mq['queue']->setFlags(AMQP_DURABLE); $process->mq['queue']->declareQueue(); $process->mq['queue']->bind(Config::MQ_EXCHANGE_NAME, Config::REQ_TVINFO_HOME); $workers[$pid] = $process; } foreach($workers as $process){ //子进程也会包含此事件 swoole_event_add($process->pipe, function ($pipe) use($process){ $data = $process->read(); //echo "RECV: " . $data.PHP_EOL; echo $data; }); } function process(swoole_process $process){// 第一个处理 global $workers; if(count($workers)>0){ echo $process->pid."===========\n"; print_r($workers); } while(1){ //$process->mq['queue']->consume($mqTaskCallBack,false,false); //$process->write(json_encode(array(mt_rand(1,10000)))); } } }}}
发布于9年前 · 1 次浏览 · 来自
提问
寻
寻梦启示。。。
{{{php /** * Created by IntelliJ IDEA. * User: winfan * Date: 16/4/10 * Time: 下午7:34 */ error_reporting(E_ALL^E_NOTICE); date_default_timezone_set('Asia/Shanghai'); require_once __DIR__.'/../../vendor/autoload.php'; use Config\Config; $workers = array(); $worker_num = 3;//创建的进程数 for($i=0;$i<$worker_num ; $i ){ $process = new swoole_process('process',false,2); $pid = $process->start(); $process->mq['conn'] = new AMQPConnection(); $process->mq['conn']->setHost(Config::$mq['nodes'][0]['amqp_host']); $process->mq['conn']->setLogin(Config::$mq['nodes'][0]['amqp_user']); $process->mq['conn']->setPort(Config::$mq['nodes'][0]['amqp_port']); $process->mq['conn']->setPassword(Config::$mq['nodes'][0]['amqp_pass']); $process->mq['conn']->connect(); $process->mq['channel'] = new AMQPChannel($process->mq['conn']); $process->mq['exchange'] = new AMQPExchange($process->mq['channel']); $process->mq['exchange']->setType(AMQP_EX_TYPE_DIRECT); $process->mq['exchange']->setName(Config::MQ_EXCHANGE_NAME); $process->mq['exchange']->setFlags(AMQP_DURABLE); $process->mq['exchange']->declareExchange(); $process->mq['queue'] = new AMQPQueue($process->mq['channel']); $process->mq['queue']->setName(Config::REQ_TVINFO_HOME); $process->mq['queue']->setFlags(AMQP_DURABLE); $process->mq['queue']->declareQueue(); $process->mq['queue']->bind(Config::MQ_EXCHANGE_NAME, Config::REQ_TVINFO_HOME); $workers[$pid] = $process; } foreach($workers as $process){ //子进程也会包含此事件 swoole_event_add($process->pipe, function ($pipe) use($process){ $data = $process->read(); //echo "RECV: " . $data.PHP_EOL; echo $data; }); } function process(swoole_process $process){// 第一个处理 global $workers; if(count($workers)>0){ echo $process->pid."===========\n"; print_r($workers); } while(1){ //$process->mq['queue']->consume($mqTaskCallBack,false,false); //$process->write(json_encode(array(mt_rand(1,10000)))); } } }}}
赞
0
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
登录
后参与评论
评论
2017-08-08
谁
谁爱这不息的变幻
我想在process回调函数里把rabbitmq队列里的数据取出来放到 swoole_event_add($process->pipe, function ($pipe) use($process){ $data = $process->read(); 放到这里处理 });
赞
0
回复
2017-08-08
原
原点
{{{ <?php /** * Created by IntelliJ IDEA. * User: winfan * Date: 16/4/10 * Time: 下午7:34 */ error_reporting(E_ALL^E_NOTICE); date_default_timezone_set('Asia/Shanghai'); require_once __DIR__.'/../../vendor/autoload.php'; use Config\Config; $workers
赞
0
回复
2017-08-09
^
^风巽^
建议在子进程的回调函数中执行`new AMQPConnection`创建连接。 另外建议直接使用同步阻塞来获取队列中的任务。
赞
0
回复