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面向对象编程快速入门
Dec 14 PHP
PHP一些常用的正则表达式字符的一些转换
Jul 29 PHP
PHP Session_Regenerate_ID函数双释放内存破坏漏洞
Jan 27 PHP
探讨file_get_contents与curl效率及稳定性的分析
Jun 06 PHP
解析php扩展php_curl.dll不加载的解决方法
Jun 26 PHP
一个PHP的远程图片抓取函数分享
Sep 25 PHP
ThinkPHP在新浪SAE平台的部署实例
Oct 31 PHP
php导出生成word的方法
Dec 25 PHP
PHP中spl_autoload_register()函数用法实例详解
Jul 18 PHP
php集成动态口令认证
Jul 21 PHP
php redis实现文章发布系统(用户投票系统)
Mar 04 PHP
PHP PDO数据库操作预处理与注意事项
Mar 16 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
《星际争霸II》全新指挥官斯台特曼现已上线
2020/03/08 星际争霸
PHP中的正规表达式(二)
2006/10/09 PHP
使用PHP把HTML生成PDF文件的几个开源项目介绍
2014/11/17 PHP
PHP预定义变量9大超全局数组用法详解
2016/04/23 PHP
PHP创建/删除/复制文件夹、文件
2016/05/03 PHP
php 使用redis锁限制并发访问类示例
2016/11/02 PHP
php array_values 返回数组的所有值详解及实例
2016/11/12 PHP
PHP设计模式之模板模式定义与用法详解
2018/12/20 PHP
vmware linux系统安装最新的php7图解
2019/04/14 PHP
JavaScript 用cloneNode方法克隆节点的代码
2012/10/15 Javascript
关于JavaScript中string 的replace
2013/04/12 Javascript
JQuery控制div外点击隐藏而div内点击不会隐藏的方法
2015/01/13 Javascript
基于javascript实现九九乘法表
2016/03/27 Javascript
微信小程序 生命周期函数详解
2017/05/24 Javascript
详解vue2.0 transition 多个元素嵌套使用过渡
2017/06/19 Javascript
JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
2017/06/30 Javascript
Vue源码解析之Template转化为AST的实现方法
2018/12/14 Javascript
vue中的inject学习教程
2019/04/24 Javascript
vue路由守卫+登录态管理实例分析
2019/05/21 Javascript
[01:10:16]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第一局
2016/02/27 DOTA
Python类属性与实例属性用法分析
2015/05/09 Python
Python文件与文件夹常见基本操作总结
2016/09/19 Python
python时间日期函数与利用pandas进行时间序列处理详解
2018/03/13 Python
pandas 将索引值相加的方法
2018/11/15 Python
python ChainMap 合并字典的实现步骤
2019/06/11 Python
python 图像的离散傅立叶变换实例
2020/01/02 Python
瑞士最大的图书贸易公司:Orell Füssli
2019/12/28 全球购物
KEEN美国官网:美国人气户外休闲鞋品牌
2021/03/09 全球购物
说说在weblogic中开发消息Bean时的persistent与non-persisten的差别
2013/04/07 面试题
《赵州桥》教学反思
2014/02/17 职场文书
班子个人四风问题整改措施
2014/10/04 职场文书
金榜题名主持词
2015/07/02 职场文书
小学英语教学反思范文
2016/02/15 职场文书
85句关于理想的名言警句大全
2019/08/22 职场文书
Idea连接MySQL数据库出现中文乱码的问题
2021/04/14 MySQL
python自动化八大定位元素讲解
2021/07/09 Python