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 相关文章推荐
谈谈新手如何学习PHP
Dec 14 PHP
PHPMyadmin 配置文件详解(配置)
Dec 03 PHP
优化php效率,提高php性能的一些方法
Mar 24 PHP
关于ob_get_contents(),ob_end_clean(),ob_start(),的具体用法详解
Jun 24 PHP
Yii分页用法实例详解
Dec 04 PHP
PHP抓取网页、解析HTML常用的方法总结
Jul 01 PHP
ThinkPHP模型详解
Jul 27 PHP
php打包压缩文件之ZipArchive方法用法分析
Apr 30 PHP
PHP中数组转换为SimpleXML教程
Jan 27 PHP
php计数排序算法的实现代码(附四个实例代码)
Mar 31 PHP
php7 错误处理机制修改实例分析
May 25 PHP
Cookie跨域问题解决方案代码示例
Nov 24 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学习之数组的定义和填充
2011/04/17 PHP
给初学者的30条PHP最佳实践(荒野无灯)
2011/08/02 PHP
解析PHP中一些可能会被忽略的问题
2013/06/21 PHP
基于PHP给大家讲解防刷票的一些技巧
2015/11/18 PHP
Windows下wamp php单元测试工具PHPUnit安装及生成日志文件配置方法
2018/05/28 PHP
JavaScript开发规范要求(规范化代码)
2010/08/16 Javascript
node.js chat程序如何实现Ajax long-polling长链接刷新模式
2012/03/13 Javascript
javascript中返回顶部按钮的实现
2015/05/05 Javascript
javascript实现的猜数小游戏完整实例代码
2016/05/10 Javascript
JS实现鼠标框选效果完整实例
2016/06/20 Javascript
jQuery插件cxSelect多级联动下拉菜单实例解析
2016/06/24 Javascript
jQuery插件HighCharts绘制2D饼图效果示例【附demo源码下载】
2017/03/21 jQuery
React-Native中props具体使用详解
2017/09/04 Javascript
vue-router实现tab标签页(单页面)详解
2017/10/17 Javascript
浅谈Vuex注入Vue生命周期的过程
2019/05/20 Javascript
Vue+Node实现商品列表的分页、排序、筛选,添加购物车功能详解
2019/12/07 Javascript
JavaScript 常见的继承方式汇总
2020/09/17 Javascript
Python中文竖排显示的方法
2015/07/28 Python
Python语言实现获取主机名根据端口杀死进程
2016/03/31 Python
python对list中的每个元素进行某种操作的方法
2018/06/29 Python
python爬虫简单的添加代理进行访问的实现代码
2019/04/04 Python
python控制nao机器人身体动作实例详解
2019/04/29 Python
python3调用windows dos命令的例子
2019/08/14 Python
Python 正则表达式爬虫使用案例解析
2019/09/23 Python
利用python Selenium实现自动登陆京东签到领金币功能
2019/10/31 Python
python 下载文件的多种方法汇总
2020/11/17 Python
selenium判断元素是否存在的两种方法小结
2020/12/07 Python
Python控制鼠标键盘代码实例
2020/12/08 Python
IE9下html5初试小刀
2010/09/21 HTML / CSS
html5时钟实现代码
2010/10/22 HTML / CSS
使用html5 canvas 画时钟代码实例分享
2015/11/11 HTML / CSS
大学生应聘导游自荐信
2014/06/02 职场文书
社区助残日活动总结
2014/08/29 职场文书
学习优秀党员杨宗兴先进事迹材料思想汇报
2014/09/14 职场文书
党支部工作总结2015
2015/04/01 职场文书
2015年销售人员工作总结
2015/04/07 职场文书