swoole 父子进程间通信
<?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 父子进程间通信的更多相关文章
- 父子进程间通信模型实现(popen)
0.FILE *popen(const char *command, const char *type); popen 函数相当于做了以下几件事: 1.创建一个无名管道文件 2. fork() 3.在 ...
- 【linux草鞋应用编程系列】_3_ 进程间通信
一.进程间通信 linux下面提供了多种进程间通信的方法, 管道.信号.信号量.消息队列.共享内存.套接字等.下面我们分别 介绍管道.信号量.消息队列.共享内存. 信号和套 ...
- 进程间通信和同步:pipe、FIFO、消息队列、信号量、共享内存、信号
一.半双工管道(pipe) 关于管道详细介绍可参考http://www.cnblogs.com/nufangrensheng/p/3560130.html. 1.管道实现父子进程间通信实例: /* p ...
- UNIX网络进程间通信漫谈(1)
进程间通信 IPC是进程间通信的简称,指的是运行在某个操作系统上的不同进程间各种消息传递方式,在Unix操作系统过去30年的演变史中,消息传递经历了如下几个阶段: 管道,管道是第一个广泛使用的IPC形 ...
- 【IPC第二个进程间通信】管道Pipe
IPC进程间通信+管道Pipe IPC(Inter-Process Communication,进程间通信). 管道用于进程间共享数据,事实上质是共享内存 ...
- Linux - 进程间通信 - 匿名管道
一.概念:进程间通信( IPC,InterProcess Communication) 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进城之间要交换数据必须通过内 ...
- 最快的进程间通信方式你get了么
前言:天下武功为快不破!在信息爆炸.快速发展的新时代...,扯远了....进程间通信方式有很多,但最快的方式你知道么?由我娓娓道来... 一.共享内存方式 主角闪亮登场了,噔噔瞪...,最快的方式就是 ...
- Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存
Linux进程间通信--进程,信号,管道,消息队列,信号量,共享内存 参考:<linux编程从入门到精通>,<Linux C程序设计大全>,<unix环境高级编程> ...
- Linux -- 进程间通信之管道
管道是 Linux 里的一种文件类型,同时也是 Linux 系统下进程间通信的一种方式 创建一个管道文件有两种方式: Shell 下命令 mkfifo + filename,即创建一个有名管道 ...
随机推荐
- 发现一个比较好玩的,git的仓库可以转换
我们通过 git clone 下载一个仓库到本地, 1.这个本地的文件夹名字可以随便改. 2.如果你把本地仓库的全部文件,剪切到另一个文件夹内,这个新的文件夹就是git的本地仓库.
- ASP.NET Core搭建多层网站架构【0-前言】
2020/01/26, ASP.NET Core 3.1, VS2019 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构 目录 0-前言 1-项目结构分层建立 2-公共基 ...
- 6_4 破损的键盘(UVa11988)<链表>
你用了一个有点坏掉的键盘打字,该键盘会自动按下”Home”键与“End”键,直到打完整个内容以前,你都没有发现到这个问题.本题给定键盘输出的字串(包含Home与End),请你输出该字串在屏幕显示的内容 ...
- Error: EACCES: permission denied, open '/Users/qinmengjiao/WebstormProjects/m-kbs-app/.babelrc
表示没有访问这个文件的权限 执行命令 sudo chown -R $(whoami) ~/WebstormProjects/m-kbs-app/.babelrc 就可以解决上面的问题 以下是chown ...
- 一周搞定模拟电路P3_电容_记录
1 电容的介绍 什么是电容 它有两个电极板,和中间板所夹的介质封装而成,具有特定功能的电子器件. 电容的作用 旁路.去耦.滤波和储能的作用 2 旁路电容的作用 1)使输入电压均匀化,减少噪声对后级的影 ...
- opencv:自定义滤波
卷积核的定义 均值卷积核 // 自定义滤波 - 均值卷积 int k = 15; Mat mkernel = Mat::ones(k, k, CV_32F) / (float)(k * k); Mat ...
- 攻防世界 simple——js
simple_js [原理] javascript的代码审计 [目地] 掌握简单的javascript函数 [环境] windows [工具] firefox [步骤] 1.打开页面,查看源代码,可以 ...
- BZOJ 3262: 陌上花开 (cdq分治,三维偏序)
#include <iostream> #include <stdio.h> #include <algorithm> using namespace std; c ...
- 【MySQL】完整性约束
" 目录 not null default unique 单列唯一 联合唯一 primary key 单列主键 复合主键 auto_increment 步长与偏移量 foreign key ...
- 【笔记6-支付及订单模块】从0开始 独立完成企业级Java电商网站开发(服务端)
支付模块 实际开发工作中经常会遇见如下场景,一个支付模块,一个订单模块,有一定依赖,一个同事负责支付模块,另一个同事负责订单模块,但是开发支付模块的时候要依赖订单模块的相关类 ,方法,或者工具类,这些 ...