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.MVC的模板标签系统(一)
Sep 05 PHP
PHP下一个非常全面获取图象信息的函数
Nov 20 PHP
PHP分多步骤填写发布信息的简单方法实例代码
Sep 23 PHP
md5 16位二进制与32位字符串相互转换示例
Dec 30 PHP
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
May 10 PHP
thinkphp备份数据库的方法分享
Jan 04 PHP
CentOS安装php v8js教程
Feb 26 PHP
PHP图片加水印实现方法
May 06 PHP
php+mysql实现的二级联动菜单效果详解
May 10 PHP
php中的登陆login实例代码
Jun 20 PHP
ThinkPHP Where 条件中常用表达式示例(详解)
Mar 31 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
Apr 06 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
如何开始收听短波广播
2021/03/01 无线电
简单实用的PHP防注入类实例
2014/12/05 PHP
使用ThinkPHP的自动完成实现无限级分类实例详解
2016/09/02 PHP
PHP implode()函数用法讲解
2019/03/08 PHP
thinkPHP5使用Rabc实现权限管理
2019/08/28 PHP
input标签内容改变的触发事件介绍
2014/06/18 Javascript
[将免费进行到底]在Amazon的一年免费服务器上安装Node.JS, NPM和OurJS博客
2014/08/18 Javascript
JS合并数组的几种方法及优劣比较
2014/09/19 Javascript
cookie的secure属性详解
2015/04/08 Javascript
javascript实现确定和取消提示框效果
2015/07/10 Javascript
深入理解jQuery之防止冒泡事件
2016/05/24 Javascript
微信小程序图片选择区域裁剪实现方法
2017/12/02 Javascript
浅谈Webpack多页应用HMR卡住问题
2019/04/24 Javascript
linux 下以二进制的方式安装 nodejs
2020/02/12 NodeJs
基于JQuery实现页面定时弹出广告
2020/05/08 jQuery
python重试装饰器示例
2014/02/11 Python
Django日志模块logging的配置详解
2017/02/14 Python
Python排序搜索基本算法之堆排序实例详解
2017/12/08 Python
基于Python中单例模式的几种实现方式及优化详解
2018/01/09 Python
python3.6.3+opencv3.3.0实现动态人脸捕获
2018/05/25 Python
Python OpenCV调用摄像头检测人脸并截图
2020/08/20 Python
如何使用Python抓取网页tag操作
2020/02/14 Python
Python中pyecharts安装及安装失败的解决方法
2020/02/18 Python
Python浮点型(float)运算结果不正确的解决方案
2020/09/22 Python
Python之qq自动发消息的示例代码
2021/02/18 Python
解决HTML5手机端页面缩放的问题
2017/10/27 HTML / CSS
Ralph Lauren意大利官方网站:时尚界最负盛名的品牌之一
2018/10/18 全球购物
澳大利亚设计师服装在线:MISHA
2019/10/07 全球购物
政府领导干部个人对照检查材料思想汇报
2014/09/24 职场文书
六查六看个人剖析材料
2014/10/14 职场文书
长城导游词400字
2015/01/30 职场文书
离婚律师函范本
2015/05/27 职场文书
法制工作总结2015
2015/07/23 职场文书
Redis读写分离搭建的完整步骤
2021/09/14 Redis
移除Selenium中window.navigator.webdriver值
2022/06/10 Python
JavaScript前端面试扁平数据转tree与tree数据扁平化
2022/06/14 Javascript