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 相关文章推荐
PHP3 safe_mode 失效漏洞
Oct 09 PHP
台湾中原大学php教程孙仲岳主讲
Jan 07 PHP
PHP 柱状图实现代码
Dec 04 PHP
php实现简单洗牌算法
Jun 18 PHP
table标签的结构与合并单元格的实现方法
Jul 24 PHP
php创建sprite
Feb 11 PHP
分享常见的几种页面静态化的方法
Jan 08 PHP
php格式化电话号码的方法
Apr 24 PHP
windows server 2008/2012安装php iis7 mysql环境搭建教程
Jun 30 PHP
对PHP依赖注入的理解实例分析
Oct 09 PHP
PHP实现的函数重载功能示例
Aug 03 PHP
为你的 Laravel 验证器加上多验证场景的实现
Apr 07 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 cURL初始化和执行方法入门级代码
2015/05/28 PHP
php中strlen和mb_strlen用法实例分析
2016/11/12 PHP
深入浅出讲解:php的socket通信原理
2016/12/03 PHP
关于恒等于(===)和非恒等于(!==)
2007/08/20 Javascript
写出更好的JavaScript之undefined篇(上)
2009/11/22 Javascript
老鱼 浅谈javascript面向对象编程
2010/03/04 Javascript
IE6 fixed的完美解决方案
2011/03/31 Javascript
基于jquery的loading 加载提示效果实现代码
2011/09/01 Javascript
js如何获取file控件的完整路径具体实现代码
2013/05/15 Javascript
javascript实现数字验证码的简单实例
2014/02/10 Javascript
jQuery中slideUp 和 slideDown 的点击事件
2015/02/26 Javascript
javascript实现状态栏文字首尾相接循环滚动的方法
2015/07/22 Javascript
js精美的幻灯片画集特效代码分享
2015/08/29 Javascript
JS实现弹性菜单效果代码
2015/09/07 Javascript
jqueryMobile使用示例分享
2016/01/12 Javascript
canvas实现绘制吃豆鱼效果
2017/01/12 Javascript
python3.4用循环往mysql5.7中写数据并输出的实现方法
2017/06/20 Python
Django使用redis缓存服务器的实现代码示例
2019/04/28 Python
Python with用法:自动关闭文件进程
2019/07/10 Python
Atom Python 配置Python3 解释器的方法
2019/08/28 Python
详解Python 字符串相似性的几种度量方法
2019/08/29 Python
Python tcp传输代码实例解析
2020/03/18 Python
详解python程序中的多任务
2020/09/16 Python
tensorflow与numpy的版本兼容性问题的解决
2021/01/08 Python
使用CSS3来代替JS实现交互
2017/08/10 HTML / CSS
详解html5页面 rem 布局适配方法
2018/01/12 HTML / CSS
Html5之webcoekt播放JPEG图片流
2020/09/22 HTML / CSS
Clarisonic美国官网:科莱丽声波洁面仪
2017/10/12 全球购物
亿阳信通股份有限公司C#笔试题
2016/12/06 面试题
歌唱比赛获奖感言
2014/01/21 职场文书
2015人事行政工作总结范文
2015/05/21 职场文书
单位同意报考证明
2015/06/17 职场文书
教师节随笔
2015/08/15 职场文书
班干部学习委员竞选稿
2015/11/20 职场文书
7个你应该知道的JS原生错误类型
2021/04/29 Javascript
mysql 带多个条件的查询方式
2021/06/05 MySQL