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 相关文章推荐
BBS(php &amp; mysql)完整版(八)
Oct 09 PHP
PHP+ajax 无刷新删除数据
Feb 20 PHP
PHP strtok()函数的优点分析
Mar 02 PHP
PHP 创建文件(文件夹)以及目录操作代码
Mar 04 PHP
PHP中空字符串介绍0、null、empty和false之间的关系
Sep 25 PHP
php字符串分割函数explode的实例代码
Feb 07 PHP
php仿QQ验证码的实例分析
Jul 01 PHP
Yii使用CLinkPager分页实例详解
Jul 23 PHP
php上传文件常见问题总结
Feb 03 PHP
微信公众平台之快递查询功能用法实例
Apr 14 PHP
PHP laravel中的多对多关系实例详解
Jun 07 PHP
Nginx下ThinkPHP5的配置方法详解
Aug 01 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 创建文件(文件夹)以及目录操作代码
2010/03/04 PHP
php+Ajax处理xml与json格式数据的方法示例
2019/03/04 PHP
jquery插件jbox使用iframe关闭问题
2009/02/09 Javascript
jQuery 入门级学习笔记及源码
2010/01/22 Javascript
jQuery入门问答 整理的几个常见的初学者问题
2010/02/22 Javascript
jQuery的链式调用浅析
2010/12/03 Javascript
用js提交表单解决一个页面有多个提交按钮的问题
2014/09/01 Javascript
javascript使用smipleChart实现简单图表
2015/01/02 Javascript
JS打开新窗口防止被浏览器阻止的方法
2015/01/03 Javascript
BootStrap.css 在手机端滑动时右侧出现空白的原因及解决办法
2016/06/07 Javascript
bootstrap-datetimepicker实现只显示到日期的方法
2016/11/25 Javascript
AngularJS开发教程之控制器之间的通信方法分析
2016/12/25 Javascript
JavaScript内置对象math,global功能与用法实例分析
2019/06/10 Javascript
layUI实现前端分页和后端分页
2019/07/27 Javascript
Vue使用预渲染代替SSR的方法
2020/07/02 Javascript
VUE实现吸底按钮
2021/03/04 Vue.js
[05:43]VG.R战队教练Mikasa专访:为目标从未停止战斗
2016/08/02 DOTA
python中查找excel某一列的重复数据 剔除之后打印
2013/02/10 Python
python中的全局变量用法分析
2015/06/09 Python
Python自动登录126邮箱的方法
2015/07/10 Python
Python 实现购物商城,含有用户入口和商家入口的示例
2017/09/15 Python
在Python运行时动态查看进程内部信息的方法
2019/02/22 Python
详解python数据结构和算法
2019/04/18 Python
详解python 爬取12306验证码
2019/05/10 Python
python如何调用java类
2020/07/05 Python
Prometheus开发中间件Exporter过程详解
2020/11/30 Python
美国女士泳装店:Swimsuits For All
2017/03/02 全球购物
VC++笔试题
2014/10/13 面试题
汽车维修专业个人求职信范文
2014/01/01 职场文书
前台接待员岗位职责
2014/01/02 职场文书
党员个人对照检查材料
2014/10/01 职场文书
2015年医德考评自我评价
2015/03/03 职场文书
2016年政治理论学习心得体会
2016/01/25 职场文书
创业计划书之物流运送
2019/09/17 职场文书
mysql5.7使用binlog 恢复数据的方法
2021/06/03 MySQL
Python OpenGL基本配置方式
2022/05/20 Python