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 相关文章推荐
在MongoDB中模拟Auto Increment的php代码
Mar 06 PHP
PHP性能优化准备篇图解PEAR安装
Dec 05 PHP
windows服务器中检测PHP SSL是否开启以及开启SSL的方法
Apr 25 PHP
smarty模板引擎使用内建函数foreach循环取出所有数组值的方法
Jan 22 PHP
PHP CURL 多线程操作代码实例
May 13 PHP
php打造智能化的柱状图程序,用于报表等
Jun 19 PHP
php数据访问之查询关键字
May 09 PHP
Smarty模板引擎缓存机制详解
May 23 PHP
Docker 如何布置PHP开发环境
Jun 21 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
Aug 31 PHP
基于PHP实现用户在线状态检测
Nov 10 PHP
PHP实现rar解压读取扩展包小结
Jun 03 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
thinkphp路由规则使用示例详解和伪静态功能实现(apache重写)
2014/02/24 PHP
php array_map()函数实例用法
2021/03/03 PHP
JavaScript Object的extend是一个常用的功能
2009/12/02 Javascript
基于jquery的代码显示区域自动拉长效果
2011/12/07 Javascript
jQuery提交多个表单的小例子
2013/06/30 Javascript
jquery鼠标放上去显示悬浮层即弹出定位的div层
2014/04/25 Javascript
nodejs开发微博实例
2015/03/25 NodeJs
javascript编写贪吃蛇游戏
2015/07/07 Javascript
jquery实现点击变换导航样式的方法
2015/08/31 Javascript
Bootstrap 组件之按钮(二)
2016/05/11 Javascript
基于bootstrap实现bootstrap中文网巨幕效果
2017/05/02 Javascript
Parcel.js + Vue 2.x 极速零配置打包体验教程
2017/12/24 Javascript
微信小程序实现swiper切换卡内嵌滚动条不显示的方法示例
2018/12/20 Javascript
Vue将页面导出为图片或者PDF
2020/08/17 Javascript
JS删除String里某个字符的方法
2021/01/06 Javascript
Vue 事件的$event参数=事件的值案例
2021/01/29 Vue.js
利用python解决mysql视图导入导出依赖的问题
2017/12/17 Python
Python 实现淘宝秒杀的示例代码
2018/01/02 Python
解决c++调用python中文乱码问题
2020/07/29 Python
Python实现七个基本算法的实例代码
2020/10/08 Python
python 基于opencv 绘制图像轮廓
2020/12/11 Python
详解用selenium来下载小姐姐图片并保存
2021/01/26 Python
Python3+SQLAlchemy+Sqlite3实现ORM教程
2021/02/16 Python
手把手教你用纯css3实现轮播图效果实例
2017/05/04 HTML / CSS
MADE法国:提供原创设计师家具
2018/09/18 全球购物
Linux中如何用命令创建目录
2015/01/12 面试题
安全检查与奖惩制度
2014/01/23 职场文书
《蚂蚁和蝈蝈》教学反思
2014/02/24 职场文书
2014年父亲节活动方案
2014/03/06 职场文书
办理房产证委托书
2014/09/18 职场文书
人事文员岗位职责
2015/02/04 职场文书
2015年世界艾滋病日活动总结
2015/03/24 职场文书
关于成立领导小组的通知
2015/04/23 职场文书
党务工作者主要事迹材料
2015/11/03 职场文书
2016年教师政治思想表现评语
2015/12/02 职场文书
Python进阶学习之带你探寻Python类的鼻祖-元类
2021/05/08 Python