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制作静态网站的模板框架(一)
Oct 09 PHP
在PHP3中实现SESSION的功能(一)
Oct 09 PHP
php下使用curl模拟用户登陆的代码
Sep 10 PHP
PHP下打开phpMyAdmin出现403错误的问题解决方法
May 23 PHP
php文字水印和php图片水印实现代码(二种加水印方法)
Dec 25 PHP
php定时执行任务设置详解
Feb 06 PHP
简单谈谈php延迟静态绑定
Jan 26 PHP
Yii2中使用join、joinwith多表关联查询
Jun 30 PHP
php运行报错Call to undefined function curl_init()的最新解决方法
Nov 20 PHP
Laravel框架路由和控制器的绑定操作方法
Jun 12 PHP
PHP单元测试框架PHPUnit用法详解
Jan 23 PHP
one.php 多项目、函数库、类库 统一为一个版本的方法
Aug 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根据isbn书号查询amazon网站上的图书信息的示例
2014/02/13 PHP
Symfony2 session用法实例分析
2016/02/04 PHP
php中如何执行linux命令详解
2018/11/06 PHP
Laravel使用原生sql语句并调用的方法
2019/10/09 PHP
基于Web标准的UI组件 — 树状菜单(2)
2006/09/18 Javascript
清除网页历史记录,屏蔽后退按钮!
2008/12/22 Javascript
六款帮助你实现惊艳视差滚动效果的jQuery插件
2012/09/14 Javascript
div+css+js实现无缝滚动类似marquee无缝滚动兼容firefox
2013/08/29 Javascript
JQuery拖动表头边框线调整表格列宽效果代码
2014/09/10 Javascript
JavaScript检测实例属性, 原型属性
2015/02/04 Javascript
基于jquery实现一个滚动的分步注册向导-附源码
2015/08/26 Javascript
js实现div拖动动画运行轨迹效果代码分享
2015/08/27 Javascript
JS组件系列之使用HTML标签的data属性初始化JS组件
2016/09/14 Javascript
bootstrapfileinput实现文件自动上传
2016/11/08 Javascript
AngularJS 限定$scope的范围实例详解
2017/06/23 Javascript
微信小程序分享功能之按钮button 边框隐藏和点击隐藏
2018/06/14 Javascript
解决mpvue + vuex 开发微信小程序vuex辅助函数mapState、mapGetters不可用问题
2018/08/03 Javascript
使用Vue做一个简单的todo应用的三种方式的示例代码
2018/10/20 Javascript
详解vue 兼容IE报错解决方案
2018/12/29 Javascript
JQuery事件委托(适用于给动态生成的脚本元素添加事件)
2020/02/01 jQuery
JavaScript实现随机点名小程序
2020/10/29 Javascript
Python中使用md5sum检查目录中相同文件代码分享
2015/02/02 Python
Python实现身份证号码解析
2015/09/01 Python
python判断设备是否联网的方法
2018/06/29 Python
在Python中定义一个常量的方法
2018/11/10 Python
Python matplotlib的使用并自定义colormap的方法
2018/12/13 Python
python encrypt 实现AES加密的实例详解
2020/02/20 Python
野兽派官方旗舰店:THE BEAST 野兽派
2016/08/05 全球购物
国际奢侈品品牌童装购物网站:Designer Childrenswear
2019/05/08 全球购物
shallow copy和deep copy的区别
2016/05/09 面试题
音乐教育感言
2014/03/05 职场文书
敬老院活动总结
2014/04/28 职场文书
护士感人事迹
2014/05/01 职场文书
工程承诺书怎么写
2014/05/24 职场文书
2015年医德医风工作总结
2015/04/02 职场文书
2015个人年度工作总结范文
2015/05/28 职场文书