首页
下载
文档
社区
视频
捐赠
源代码
赞助商
AOT 编译器
AI 助理
商业产品
PHP AOT 原生编译器
Swoole-Compiler 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
swoole_process 和 swoole_timer_tick 无法配合使用
```php #!/usr/bin/env php <?php $commonFile = dirname(dirname(__FILE__)) . '/common.php'; include($commonFile); /** * @param string $input */ function invoke($input) { echo date('m/d H:i:s') . 'invoke=>' . json_encode($input) . PHP_EOL; } /** * @return array */ function generate() { } $workers = []; $workerNum = 3; for ($i = 0; $i < $workerNum; $i++) { $process = new swoole_process('child_sync'); $pid = $process->start(); $workers[$i] = $process; } master_sync($workers); // 主进程 function master_sync($workers) { swoole_set_process_name("master_sync"); $list[] = [1, 2, 3, 4, 5, 6]; $list[] = [1, 2, 3, 4, 5, 6]; $list[] = [1, 2, 3, 4, 5, 6]; foreach($list as $i => $data) { $process = $workers[$i]; $process->write($data); $recv = $process->read(); echo "RECV From Worker March# {$process->pid} :" . $recv . PHP_EOL; } } //子进程 function child_sync(swoole_process $worker) { $pid = $worker->pid; swoole_set_process_name("child_sync#{$pid}"); echo "Worker: start. PID=" . $pid . "\n"; // recv data from master $recv = $worker->read(); invoke($recv); // send data to master $worker->write("Worker " . $pid . " complete\n"); //swoole_timer_tick(2000, function ($interval) use ($worker) { // echo "#{$worker->pid} child process timer $interval\n"; // 如果worker中没有定时器,则会输出 process timer xxx //}); //sleep(2); //$worker->exit(0); } ```
发布于9年前 · 5 次浏览 · 来自
提问
内
内裤叔叔
```php #!/usr/bin/env php <?php $commonFile = dirname(dirname(__FILE__)) . '/common.php'; include($commonFile); /** * @param string $input */ function invoke($input) { echo date('m/d H:i:s') . 'invoke=>' . json_encode($input) . PHP_EOL; } /** * @return array */ function generate() { } $workers = []; $workerNum = 3; for ($i = 0; $i < $workerNum; $i++) { $process = new swoole_process('child_sync'); $pid = $process->start(); $workers[$i] = $process; } master_sync($workers); // 主进程 function master_sync($workers) { swoole_set_process_name("master_sync"); $list[] = [1, 2, 3, 4, 5, 6]; $list[] = [1, 2, 3, 4, 5, 6]; $list[] = [1, 2, 3, 4, 5, 6]; foreach($list as $i => $data) { $process = $workers[$i]; $process->write($data); $recv = $process->read(); echo "RECV From Worker March# {$process->pid} :" . $recv . PHP_EOL; } } //子进程 function child_sync(swoole_process $worker) { $pid = $worker->pid; swoole_set_process_name("child_sync#{$pid}"); echo "Worker: start. PID=" . $pid . "\n"; // recv data from master $recv = $worker->read(); invoke($recv); // send data to master $worker->write("Worker " . $pid . " complete\n"); //swoole_timer_tick(2000, function ($interval) use ($worker) { // echo "#{$worker->pid} child process timer $interval\n"; // 如果worker中没有定时器,则会输出 process timer xxx //}); //sleep(2); //$worker->exit(0); } ```
赞
0
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
登录
后参与评论
评论
2017-07-17
呵
呵呵
```php #!/usr/bin/env php <?php $commonFile = dirname(dirname(__FILE__)) . '/common.php'; include($commonFile); /** * @param string $input */ function battle() { $now = microtime(true); //战斗的ID队列列表 M_Battle_QueueHandler::run(1); $end
赞
0
回复
2017-07-18
同
同行说
swoole_timer_tick 是异步的,$worker->read()会阻塞,所以无法运行
赞
0
回复