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 $_SERVER当前完整url的写法
Nov 12 PHP
PHP 事务处理数据实现代码
May 13 PHP
基于PHPExcel的常用方法总结
Jun 13 PHP
Codeigniter生成Excel文档的简单方法
Jun 12 PHP
PHP中UNIX时间戳和日期间的转换与计算实例
Nov 19 PHP
使用php的HTTP请求的库Requests实现美女图片墙
Feb 22 PHP
CI框架中$this-&gt;load-&gt;library()用法分析
May 18 PHP
thinkphp3.2.3 分页代码分享
Jul 28 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
Aug 02 PHP
OAuth认证协议中的HMACSHA1加密算法(实例)
Oct 25 PHP
php实现简易计算器
Aug 28 PHP
PHP实现考试倒计时功能代码
Apr 16 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
我常用的几个类
2006/10/09 PHP
php is_file()和is_dir()用于遍历目录时用法注意事项
2010/03/02 PHP
php抽象类用法实例分析
2015/07/07 PHP
Joomla框架实现字符串截取的方法示例
2017/07/18 PHP
Laravel 添加多语言提示信息的方法
2019/09/29 PHP
JS特权方法定义作用以及与公有方法的区别
2013/03/18 Javascript
js中style.display=&quot;&quot;无效的解决方法
2014/10/30 Javascript
JavaScript检测实例属性, 原型属性
2015/02/04 Javascript
javascript实现将文件保存到本地方法汇总
2015/07/26 Javascript
JS实现超简单的鼠标拖动效果
2015/11/02 Javascript
Javascript生成全局唯一标识符(GUID,UUID)的方法
2016/02/27 Javascript
AngularJS 基础ng-class-even指令用法
2016/08/01 Javascript
JavaScript中数组slice和splice的对比小结
2016/09/22 Javascript
vue实现手机号码抽奖上下滚动动画示例
2017/10/18 Javascript
vue的style绑定background-image的方式和其他变量数据的区别详解
2018/09/03 Javascript
vue 使某个组件不被 keep-alive 缓存的方法
2018/09/21 Javascript
vue中进入详情页记住滚动位置的方法(keep-alive)
2018/09/21 Javascript
vue页面切换项目实现转场动画的方法
2019/11/12 Javascript
JQuery常用选择器功能与用法实例分析
2019/12/23 jQuery
js页面加载后执行的几种方式小结
2020/01/30 Javascript
uni-app使用countdown插件实现倒计时
2020/11/01 Javascript
Perl中著名的Schwartzian转换问题解决实现
2015/06/02 Python
用Django实现一个可运行的区块链应用
2018/03/08 Python
python如何实现数据的线性拟合
2019/07/19 Python
Python测试模块doctest使用解析
2019/08/10 Python
wxPython+Matplotlib绘制折线图表
2019/11/19 Python
Python3监控疫情的完整代码
2020/02/20 Python
python中shell执行知识点
2020/05/06 Python
Python实现快速大文件比较代码解析
2020/09/04 Python
python实现邮件循环自动发件功能
2020/09/11 Python
CSS3之背景尺寸Background-size使用介绍
2013/10/14 HTML / CSS
人事专员的职责
2014/02/26 职场文书
合伙购房协议样本
2014/10/06 职场文书
2014年优秀党员材料
2014/12/18 职场文书
自愿离婚协议书2015
2015/01/26 职场文书
2015年档案管理员工作总结
2015/05/13 职场文书