PHP多进程通信-消息队列使用


Posted in PHP onMarch 08, 2019

向消息队列发送数据和获取数据的测试

<?php
$key=ftok(__FILE__,'a');

//获取消息队列
$queue=msg_get_queue($key,0666);
//发送消息
//msg_send($queue, 1, "Hello, 1");
//接收消息,如果接收不到会阻塞
msg_receive($queue, 1, $message_type, 1024, $message1);
//移除消息
//msg_remove_queue($queue);
//var_dump($message1);

PHP多进程通信-消息队列使用

<?php
/**
 * 这段代码模拟了一个日常的任务。
 * 第一个父进程产生了一个子进程。子进程又作为父进程,产生10个子进程。
 * 可以简化为A -> B -> c,d,e... 等进程。
 * 作为A来说,只需要生产任务,然后交给B 来处理。B 则会将任务分配给10个子进程来进行处理。
 * 
 */

//设定脚本永不超时
set_time_limit(0);
$ftok = ftok(__FILE__, 'a');
$msg_queue = msg_get_queue($ftok);
$pidarr = []; 

//产生子进程
$pid = pcntl_fork();
if ($pid) {
 //父进程模拟生成一个特大的数组。
 $arr = range(1,100000);
 //将任务放进队里,让多个子进程并行处理
 foreach ($arr as $val) {
  $status = msg_send($msg_queue,1, $val);
  usleep(1000);
 } 
 $pidarr[] = $pid;
 msg_remove_queue($msg_queue);
} else {
 //子进程收到任务后,fork10个子进程来处理任务。
 for ($i =0; $i<10; $i++) {
  $childpid = pcntl_fork();
  if ($childpid) {
   $pidarr[] = $childpid; //收集子进程processid
  } else {
   while (true) {
    msg_receive($msg_queue, 0, $msg_type, 1024, $message);
    if (!$message) exit(0);
    echo $message.PHP_EOL;
    usleep(1000);
   } 
  } 
 } 
}

//防止主进程先于子进程退出,形成僵尸进程
while (count($pidarr) > 0) {
 foreach ($pidarr as $key => $pid) {
  $status = pcntl_waitpid($pid, $status);
  if ($status == -1 || $status > 0) {
   unset($pidarr[$key]);
  } 
 } 
 sleep(1);
}

PHP多进程通信-消息队列使用

以上所述是小编给大家介绍的PHP通信-消息队列使用详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
判“新”函数:得到今天与明天的秒数
Oct 09 PHP
再次研究下cache_lite
Feb 14 PHP
解析Win7 XAMPP apache无法启动的问题
Jun 26 PHP
php颜色转换函数hex-rgb(将十六进制格式转成十进制格式)
Sep 23 PHP
phpExcel中文帮助手册之常用功能指南
Aug 18 PHP
php结合curl实现多线程抓取
Jul 09 PHP
PHP文件缓存类实现代码
Oct 26 PHP
PHP几个实用自定义函数小结
Jan 25 PHP
Yii rules常用规则示例
Mar 15 PHP
YII视图整合kindeditor扩展的方法
Jul 13 PHP
php array_multisort 对数组进行排序详解及实例代码
Oct 27 PHP
php无限级评论嵌套实现代码
Apr 18 PHP
浅谈PHP匿名函数和闭包
Mar 08 #PHP
使用PHPUnit进行单元测试并生成代码覆盖率报告的方法
Mar 08 #PHP
ThinkPHP中图片按比例切割的代码实例
Mar 08 #PHP
PHP的微信支付接口使用方法讲解
Mar 08 #PHP
PHP实现会员账号单唯一登录的方法分析
Mar 07 #PHP
PHP模糊查询技术实例分析【附源码下载】
Mar 07 #PHP
原生PHP实现导出csv格式Excel文件的方法示例【附源码下载】
Mar 07 #PHP
You might like
解决php接收shell返回的结果中文乱码问题
2014/01/23 PHP
php实现的验证码文件类实例
2015/06/18 PHP
php实现的递归提成方案实例
2015/11/14 PHP
Laravel如何友好的修改.env配置文件详解
2017/06/07 PHP
tp5 sum某个字段相加得到总数的例子
2019/10/18 PHP
lib.utf.js
2007/08/21 Javascript
基于jQuery的ajax功能实现web service的json转化
2009/08/29 Javascript
javascript:history.go()和History.back()的区别及应用
2012/11/25 Javascript
JS中引用百度地图并将百度地图的logo和信息去掉
2013/09/29 Javascript
js点击出现悬浮窗效果不使用JQuery插件
2014/01/20 Javascript
深入分析js的冒泡事件
2014/12/05 Javascript
日常收集整理的JavaScript常用函数方法
2015/12/10 Javascript
AngularJS ng-template寄宿方式用法分析
2016/11/07 Javascript
JavaScript获取ul中li个数的方法
2017/02/13 Javascript
Javascript封装id、class与元素选择器方法示例
2017/03/13 Javascript
nodejs 搭建简易服务器的图文教程(推荐)
2017/07/18 NodeJs
使用Vue实现移动端左滑删除效果附源码
2019/05/16 Javascript
layui关闭弹窗后刷新主页面和当前更改项的例子
2019/09/06 Javascript
layui点击数据表格添加或删除一行的例子
2019/09/12 Javascript
JS实现电商商品展示放大镜特效
2020/01/07 Javascript
Typescript3.9 常用新特性一览(推荐)
2020/05/14 Javascript
基于VUE实现判断设备是PC还是移动端
2020/07/03 Javascript
谈谈Python进行验证码识别的一些想法
2016/01/25 Python
为什么从Python 3.6开始字典有序并效率更高
2019/07/15 Python
Python CVXOPT模块安装及使用解析
2019/08/01 Python
cookies应对python反爬虫知识点详解
2020/11/25 Python
pycharm 快速解决python代码冲突的问题
2021/01/15 Python
小女主人连衣裙:Little Mistress
2017/07/10 全球购物
英国领先的在线高尔夫商店:Scottsdale Golf
2019/08/26 全球购物
jQuery treeview树形结构应用
2021/03/24 jQuery
小学教师岗位职责
2013/11/25 职场文书
菜篮子工程实施方案
2014/03/08 职场文书
大学生个人学习总结
2015/02/15 职场文书
新店开业策划方案怎么书写?
2019/07/05 职场文书
python开发的自动化运维工具ansible详解
2021/08/07 Python
浅谈为什么我的 z-index 又不生效了
2022/07/15 HTML / CSS