<?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.";
});
 

swoole 父子进程间通信的更多相关文章

  1. 父子进程间通信模型实现(popen)

    0.FILE *popen(const char *command, const char *type); popen 函数相当于做了以下几件事: 1.创建一个无名管道文件 2. fork() 3.在 ...

  2. 【linux草鞋应用编程系列】_3_ 进程间通信

    一.进程间通信        linux下面提供了多种进程间通信的方法, 管道.信号.信号量.消息队列.共享内存.套接字等.下面我们分别 介绍管道.信号量.消息队列.共享内存.        信号和套 ...

  3. 进程间通信和同步:pipe、FIFO、消息队列、信号量、共享内存、信号

    一.半双工管道(pipe) 关于管道详细介绍可参考http://www.cnblogs.com/nufangrensheng/p/3560130.html. 1.管道实现父子进程间通信实例: /* p ...

  4. UNIX网络进程间通信漫谈(1)

    进程间通信 IPC是进程间通信的简称,指的是运行在某个操作系统上的不同进程间各种消息传递方式,在Unix操作系统过去30年的演变史中,消息传递经历了如下几个阶段: 管道,管道是第一个广泛使用的IPC形 ...

  5. 【IPC第二个进程间通信】管道Pipe

    IPC进程间通信+管道Pipe                IPC(Inter-Process Communication,进程间通信).         管道用于进程间共享数据,事实上质是共享内存 ...

  6. Linux - 进程间通信 - 匿名管道

    一.概念:进程间通信( IPC,InterProcess Communication) 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进城之间要交换数据必须通过内 ...

  7. 最快的进程间通信方式你get了么

    前言:天下武功为快不破!在信息爆炸.快速发展的新时代...,扯远了....进程间通信方式有很多,但最快的方式你知道么?由我娓娓道来... 一.共享内存方式 主角闪亮登场了,噔噔瞪...,最快的方式就是 ...

  8. Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存

    Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存 参考:<linux编程从入门到精通>,<Linux C程序设计大全>,<unix环境高级编程> ...

  9. Linux -- 进程间通信之管道

    管道是 Linux 里的一种文件类型,同时也是 Linux 系统下进程间通信的一种方式   创建一个管道文件有两种方式:  Shell 下命令 mkfifo + filename,即创建一个有名管道 ...

随机推荐

  1. 汪莹:以RELX悦刻为例,复盘中国品牌出海的跨文化挑战

    海外销售额每月2倍增速,3个月拿下东南亚市场第一,出口43个国家,拥有250万用户--你可能不知道,这是一家成立仅一年半.出海仅7个月的中国企业交出的答卷. 这家企业就是中国第一大电子烟品牌RELX悦 ...

  2. Vacation

    题目看上去倒是蛮复杂的样子嘞!

  3. python GIL锁与多cpu

    多核CPU   linux : cat /proc/cpuinfo 如果你不幸拥有一个多核CPU,你肯定在想,多核应该可以同时执行多个线程. 如果写一个死循环的话,会出现什么情况呢? 打开Mac OS ...

  4. mybatis - MybatisAutoConfiguration

    一. MybatisProperties 在使用 mybatis 时, 还需要对mapper进行配置: mybatis: mapper-locations: classpath:mapper/**Ma ...

  5. idea2019.2激活至2089年!

    上图! 激活到2089年8月,绝对够用! ​ 注意:在激活之前,无需改动 host 文件. 资料自取:链接:https://pan.baidu.com/s/1MzX5ewt6lbzHYuggP5sGE ...

  6. vscode管理员身份运行

    管理员身份运行,如vscode 如何设置呢? vscode图标右键 以管理员身份运行程序打钩就行了 运行“在终端打开”的时候,要以管理员身份运行 刚下载完vscode并运行并不是管理员身份会报错  解 ...

  7. [Python] Tkinter的食用方法_01_简单界面

    #开始 放假之后感觉整个人已经放飞自我了,完全不知道自己一天天在干什么,明明有很多的事情需要做,但是实际上每天啥都没做,,,虚度光阴... 晚上突然心烦意乱,开始思考今天一天都做了什么,感觉很有负罪感 ...

  8. vs2019 opencv4的相关配置

    opencv4.11存在改动,导致许多demo没有办法正常运行,但是配置方法却是相同的. 主要是连接器输入,头文件包含路径,库路.如果想要调试,还需要设置调试文件符号表. [未完待续]

  9. EntityFramework中使用sql语句

    https://blog.csdn.net/yangyangafan/article/details/77602133 EntityFramework操作数据库谜一般的方便还不用写数据库,但前提是很简 ...

  10. MYSQL数据库索引、事务。

    =============================================================================================== inno ...