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 禁止页面缓存输出
Jan 07 PHP
php操作excel文件 基于phpexcel
Jul 02 PHP
Can't create/write to file 'C:\WINDOWS\TEMP\...MYSQL报错解决方法
Jun 30 PHP
PHP判断图片格式的七种方法小结
Jun 03 PHP
用PHP来计算某个目录大小的方法
Apr 01 PHP
php带抄送和密件抄送的邮件发送方法
Mar 20 PHP
php通过baihui网API实现读取word文档并展示
Jun 22 PHP
php-redis中的sort排序函数总结
Jul 08 PHP
PHP微信支付开发实例
Jun 22 PHP
PHP打印输出函数汇总
Aug 28 PHP
laravel手动创建数组分页的实现代码
Jun 07 PHP
yii2 url重写并隐藏index.php方法
Dec 10 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去掉URL网址中带有PHPSESSID的配置方法
2014/07/08 PHP
浅析php工厂模式
2014/11/25 PHP
PHP简单判断iPhone、iPad、Android及PC设备的方法
2016/10/11 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
2018/02/10 PHP
php实现往pdf中加数字签名操作示例【附源码下载】
2018/08/07 PHP
MultiSelect左右选择控件的设计与实现介绍
2013/06/08 Javascript
JS delegate与live浅析
2013/12/21 Javascript
Prototype框架详解
2015/11/25 Javascript
JS弹出窗口插件zDialog简单用法示例
2016/06/12 Javascript
jQuery实现点击弹出背景变暗遮罩效果实例代码
2016/06/24 Javascript
js接收并转化Java中的数组对象的方法
2016/08/11 Javascript
easyui 中的datagrid跨页勾选问题的实现方法
2017/01/18 Javascript
NodeJS测试框架mocha入门教程
2017/03/28 NodeJs
jQuery 中msgTips 顶部弹窗效果实现代码
2017/08/14 jQuery
ES6学习教程之模板字符串详解
2017/10/09 Javascript
详解处理bootstrap4不支持远程静态框问题
2018/07/20 Javascript
nodejs更新package.json中的dependencies依赖到最新版本的方法
2018/10/10 NodeJs
JS中比较两个Object数组是否相等方法实例
2019/11/11 Javascript
vue3弹出层V3Popup实例详解
2021/01/04 Vue.js
Python中optionParser模块的使用方法实例教程
2014/08/29 Python
Python的Twisted框架中使用Deferred对象来管理回调函数
2016/05/25 Python
python算法表示概念扫盲教程
2017/04/13 Python
python 文件操作删除某行的实例
2017/09/04 Python
Python使用PIL模块生成随机验证码
2017/11/21 Python
python实现xlsx文件分析详解
2018/01/02 Python
Python实现使用卷积提取图片轮廓功能示例
2018/05/12 Python
Python检查ping终端的方法
2019/01/26 Python
python 使用elasticsearch 实现翻页的三种方式
2020/07/31 Python
IE支持HTML5的解决方法
2009/10/20 HTML / CSS
Parfumdreams英国:香水和化妆品
2019/05/10 全球购物
中文专业毕业生自荐信
2013/10/28 职场文书
干部个人考察材料
2014/12/24 职场文书
教师听课学习心得体会
2016/01/15 职场文书
《自己的花是让别人看的》教学反思
2016/02/19 职场文书
公文写作:教你写“建议书”
2019/05/07 职场文书
如何在Python项目中引入日志
2021/05/31 Python