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 相关文章推荐
linux系统上支持php的 iconv()函数的方法
Oct 01 PHP
PHP中spl_autoload_register函数的用法总结
Nov 07 PHP
php多文件上传下载示例分享
Feb 20 PHP
PHP实现获取客户端IP并获取IP信息
Mar 17 PHP
Laravel5.1数据库连接、创建数据库、创建model及创建控制器的方法
Mar 29 PHP
用php和jQuery来实现“顶”和“踩”的投票功能
Oct 13 PHP
解决form中action属性后面?传递参数 获取不到的问题
Jul 21 PHP
PHP 爬取网页的主要方法
Jul 13 PHP
PHP实现微信退款功能
Oct 02 PHP
php面试实现反射注入的详细方法
Sep 30 PHP
Laravel实现批量更新多条数据
Apr 06 PHP
PHP var关键字相关原理及使用实例解析
Jul 11 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程序
2006/10/09 PHP
解密ThinkPHP3.1.2版本之模块和操作映射
2014/06/19 PHP
php短网址和数字之间相互转换的方法
2015/03/13 PHP
java script编程起步(第三课)
2007/01/10 Javascript
javascript判断单选框或复选框是否选中方法集锦
2007/04/04 Javascript
Ext JS 4官方文档之三 -- 类体系概述与实践
2012/12/16 Javascript
js 在定义的时候立即执行的函数表达式(function)写法
2013/01/16 Javascript
jQuery实现回车键(Enter)切换文本框焦点的代码实例
2014/05/05 Javascript
Js为表单动态添加节点内容的方法
2015/02/10 Javascript
jquery获取及设置outerhtml的方法
2015/03/09 Javascript
jquery插件unobtrusive实现片段式加载
2015/06/15 Javascript
Bootstrap实现导航栏的2种方式
2016/11/28 Javascript
ES6 javascript中class静态方法、属性与实例属性用法示例
2017/10/30 Javascript
vue3.0 CLI - 2.6 - 组件的复用入门教程
2018/09/14 Javascript
vue-cli 使用vue-bus来全局控制的实例讲解
2018/09/15 Javascript
JS如何实现动态添加的元素绑定事件
2019/11/12 Javascript
React中获取数据的3种方法及优缺点
2020/02/18 Javascript
老生常谈Python startswith()函数与endswith函数
2017/09/08 Python
python3实现windows下同名进程监控
2018/06/21 Python
Python比较配置文件的方法实例详解
2019/06/06 Python
opencv3/Python 稠密光流calcOpticalFlowFarneback详解
2019/12/11 Python
python 定义类时,实现内部方法的互相调用
2019/12/25 Python
python3将变量写入SQL语句的实现方式
2020/03/02 Python
python和C++共享内存传输图像的示例
2020/10/27 Python
使用Python判断一个文件是否被占用的方法教程
2020/12/16 Python
python 制作网站小说下载器
2021/02/20 Python
来自世界上最好大学的在线课程:edX
2018/10/16 全球购物
SAZAC的动物连体衣和动物睡衣:Kigurumi Shop
2020/03/14 全球购物
设计师大码女装:11 Honoré
2020/05/03 全球购物
高校辅导员推荐信范文
2013/12/25 职场文书
学习作风建设心得体会
2014/10/22 职场文书
投标邀请书范本
2015/02/02 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
病假证明模板
2015/06/19 职场文书
2019年励志签名:致拼搏路上的自己
2019/10/11 职场文书
Flask搭建一个API服务器的步骤
2021/05/28 Python