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 相关文章推荐
为查询结果建立向后/向前按钮
Oct 09 PHP
让PHP支持页面回退的两种方法[转]
Feb 14 PHP
php将时间差转换为字符串提示
Sep 07 PHP
PHP安全配置详细说明
Sep 26 PHP
php启用zlib压缩文件的配置方法
Jun 12 PHP
php中simplexml_load_string使用实例分享
Feb 13 PHP
php中调用其他系统http接口的方法说明
Feb 28 PHP
Drupal7 form表单二次开发要点与实例
Mar 02 PHP
PHP正则提取不包含指定网址的图片地址的例子
Apr 21 PHP
php下foreach提示Warning:Invalid argument supplied for foreach()的解决方法
Nov 11 PHP
PHP文件操作方法汇总
Jul 01 PHP
PHP对象、模式与实践之高级特性分析
Dec 08 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 iconv 解决utf-8和gb2312编码转换问题
2010/04/12 PHP
Symfony数据校验方法实例分析
2015/01/26 PHP
服务器上配置PHP运行环境教程
2015/02/12 PHP
使用composer命令加载vendor中的第三方类库 的方法
2019/07/09 PHP
PHP基于session.upload_progress 实现文件上传进度显示功能详解
2019/08/09 PHP
jQuery结合Json提交数据到Webservice,并接收从Webservice返回的Json数据
2011/02/18 Javascript
jQuery使用之处理页面元素用法实例
2015/01/19 Javascript
C++中的string类的用法小结
2015/08/07 Javascript
全面解析Bootstrap手风琴效果
2020/04/17 Javascript
jQuery ajax分页插件实例代码
2016/01/27 Javascript
实例讲解jQuery EasyUI tree中state属性慎用
2016/04/01 Javascript
浅谈JavaScript前端开发的MVC结构与MVVM结构
2016/06/03 Javascript
全面解析JavaScript里的循环方法之forEach,for-in,for-of
2020/04/20 Javascript
SpringMVC简单整合Angular2的示例
2017/07/31 Javascript
深入浅析vue组件间事件传递
2017/12/29 Javascript
微信小程序分享海报生成的实现方法
2018/12/10 Javascript
JavaScript变量提升和严格模式实例分析
2019/01/27 Javascript
微信小程序实现卡片左右滑动效果的示例代码
2019/05/01 Javascript
bootstrap table插件动态加载表头
2019/07/19 Javascript
js实现固定区域内的不重叠随机圆
2019/10/24 Javascript
关于vue2强制刷新,解决页面不会重新渲染的问题
2019/10/29 Javascript
antd日期选择器禁止选择当天之前的时间操作
2020/10/29 Javascript
Python实现类似jQuery使用中的链式调用的示例
2016/06/16 Python
Python 中字符串拼接的多种方法
2018/07/30 Python
python制作填词游戏步骤详解
2019/05/05 Python
关于Python 常用获取元素 Driver 总结
2019/11/24 Python
Python和Anaconda和Pycharm安装教程图文详解
2020/02/04 Python
Python 3.8 新功能大揭秘【新手必学】
2020/02/05 Python
Django 项目通过加载不同env文件来区分不同环境
2020/02/17 Python
基于python检查矩阵计算结果
2020/05/21 Python
python 如何对logging日志封装
2020/12/02 Python
艺术用品:Arteza
2018/11/25 全球购物
AJax面试题
2014/11/25 面试题
改进作风怎么办发言材料
2014/08/17 职场文书
公司员工手册范本
2015/05/14 职场文书
青年干部培训班学习心得体会
2016/01/06 职场文书