<?php
/**
* 场景:
* 监控订单表状态 父子进程通信
* 一个主进程 两个子进程实现
*/ //设置主进程名
echo '主进程id:' . posix_getpid() . PHP_EOL;
cli_set_process_title('php_main'); //1、此子进程用于监听数据的改变
$process1 = new Swoole\Process(function (\Swoole\Process $process) {
// cli_set_process_title('php_child');
$process->name('php_child1');
$pdo = new PDO('mysql:host=mysql;dbname=test', 'root', 'root'); while (true) {
$statement = $pdo->query('select * from `order` where is_pay=1 and is_notice=0 order by id desc');
$data = $statement->fetch(PDO::FETCH_ASSOC);
if ($data) {
//向主进程发送消息
$process->write('php_child1发送' . $data['client_name'] . '已支付 ');
$pdo->exec('update `order` set is_notice=1 where id=' . $data['id']);
}
sleep(3);
}
}, false, SOCK_STREAM, true);
echo '子进程1 id:' . $process1->start() . PHP_EOL; //2、此子进程用于发送邮件
$process2 = new Swoole\Process(function (\Swoole\Process $process) {
$process->name('php_child2');
while (true) {
$orderInfo = $process->read();
if ($orderInfo) {
echo $orderInfo;
echo 'php_child2发送邮件' . PHP_EOL;
}
sleep(3);
}
}, false, SOCK_STREAM, true);
echo '子进程2 id:' . $process2->start() . PHP_EOL; while (true) {
//主进程读取子进程1中的消息
$orderInfo = $process1->read();
if ($orderInfo) {
//主进程发送数据给子进程2
$process2->write($orderInfo);
}
sleep(3);
} //\Swoole\Process::wait();
//使用Process作为监控父进程,创建管理子进程时,父类必须注册信号SIGCHLD对退出的进程执行wait,否则子进程退出时会变成僵尸进程
Swoole\Process::signal(SIGTERM, function ($signo) {
echo "shutdown.";
});
 

最新文章

  1. 谈谈html5存储之IndexdDB
  2. C# 对多个集合和数组的操作(合并、去重复、判断)
  3. Lua中的常用函数库汇总
  4. Z.XML第二次迭代分数分配
  5. pyqt5和qt-designer结合
  6. Linux 编译安装 apache 2.4
  7. 云脉表格识别开放SDK接入
  8. 异步操作AsycnTask类
  9. java中File类详解
  10. spark能传递外部命名参数给main函数吗?
  11. Python (time、datetime、random、os、sys、shutil)模块的使用
  12. [luogu2476][bzoj1079][SCOI2008]着色方案【动态规划】
  13. OpenLayers学习笔记(三)— QML与HTML通信之 地图上点击添加自由文本
  14. qml性能优化(来源于群友分享);
  15. 搭建ubuntu14.04服务器必备环境
  16. uoj233/BZOJ4654/洛谷P1721 [Noi2016]国王饮水记 【dp + 斜率优化】
  17. vue优势
  18. Error 之 只能在执行Render() 的过程中调用 RegisterForEventValidation;
  19. 【BZOJ】4012: [HNOI2015]开店
  20. atitit.印度教与java宗教的特点与观念对比 attilax总结

热门文章

  1. weinre 真机调试
  2. JEECG用户录入时用户账号长度修改
  3. IDEA类和方法注释自动生成
  4. Mybatis 元素类型为 &quot;resultMap&quot; 的内容必须匹配 &quot;(constructor?,id*,result*,association*,collection*,discriminat
  5. JAVA(4)之关于项目部署在tomcat
  6. Amoeba介绍及原理
  7. tp5的输入和验证
  8. 虚拟机中安装centos7后无法上网,使用桥接网络+ssh
  9. iOS中的主要框架framework
  10. DVWA的文件上传漏洞(high)