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 URL验证正则表达式
Jul 19 PHP
关于PHP结束标签的使用细节探讨及联想
Mar 04 PHP
Php output buffering缓存及程序缓存深入解析
Jul 15 PHP
PHP5.3安装Zend Guard Loader图文教程
Sep 29 PHP
PHP使用gmdate实现将一个UNIX 时间格式化成GMT文本的方法
Mar 19 PHP
win7系统配置php+Apache+mysql环境的方法
Aug 21 PHP
详解WordPress中调用评论模板和循环输出评论的PHP函数
Jan 05 PHP
PHP生成各种常见验证码和Ajax验证过程
Jan 10 PHP
浅谈PHP的反射机制
Dec 15 PHP
php实现xml转换数组的方法示例
Feb 03 PHP
Mac系统完美安装PHP7详细教程
Jun 06 PHP
PHP判断是否是json字符串
Apr 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 print EOF实现方法
2009/05/21 PHP
连接到txt文本的超链接,不直接打开而是点击后下载的处理方法
2009/07/01 PHP
PHP实现通过CURL上传文件功能示例
2018/05/30 PHP
JavaScipt基本教程之前言
2008/01/16 Javascript
jquery创建div 实现代码
2009/04/27 Javascript
jQuery 在光标定位的地方插入文字的插件
2012/05/10 Javascript
通过jQuery源码学习javascript(三)
2012/12/27 Javascript
jquery win 7透明弹出层效果的简单代码
2013/08/06 Javascript
轻松创建nodejs服务器(8):非阻塞是如何实现的
2014/12/18 NodeJs
解决Jquery向页面append新元素之后事件的绑定问题
2015/03/16 Javascript
JS右下角广告窗口代码(可收缩、展开及关闭)
2015/09/04 Javascript
jQuery Html控件基本操作(日常收集整理)
2016/03/11 Javascript
Bootstrap弹出框(modal)垂直居中的问题及解决方案详解
2016/06/12 Javascript
详解使用nvm管理多版本node的方法
2017/08/30 Javascript
vue watch自动检测数据变化实时渲染的方法
2018/01/16 Javascript
Vue.js单向绑定和双向绑定实例分析
2018/08/14 Javascript
vue自定v-model实现表单数据双向绑定问题
2018/09/03 Javascript
jQuery实现动画、消失、显现、渐出、渐入效果示例
2018/09/06 jQuery
更改BootStrap popover的默认样式及popover简单用法
2018/09/13 Javascript
记React connect的几种写法(小结)
2018/09/18 Javascript
浅谈关于iview表单验证的问题
2018/09/29 Javascript
小程序红包雨的实现示例
2019/02/19 Javascript
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
Python set集合类型操作总结
2014/11/07 Python
实例讲解Python脚本成为Windows中运行的exe文件
2019/01/24 Python
利用pyecharts读取csv并进行数据统计可视化的实现
2020/04/17 Python
在pycharm中关掉ipython console/PyDev操作
2020/06/09 Python
在线学习西班牙语、法语或其他语言:Babbel.com
2018/02/07 全球购物
工厂门卫岗位职责
2013/11/25 职场文书
小学生国旗下演讲稿
2014/04/25 职场文书
欢迎横幅标语
2014/06/17 职场文书
毕业实习指导教师评语
2014/12/31 职场文书
人生遥控器观后感
2015/06/11 职场文书
公司规章制度范本
2015/08/03 职场文书
如何用Python搭建gRPC服务
2021/06/30 Python
九大龙王魂骨,山龙王留下躯干骨,榜首死的最憋屈(被捏碎)
2022/03/18 国漫