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 相关文章推荐
生成sessionid和随机密码的例子
Oct 09 PHP
解析PHP生成静态html文件的三种方法
Jun 18 PHP
对于PHP 5.4 你必须要知道的
Aug 07 PHP
php 判断是否是中文/英文/数字示例代码
Sep 30 PHP
PHP IE中下载附件问题解决方法
Jan 07 PHP
PHP实现数据分页显示的简单实例
May 26 PHP
php中的登陆login实例代码
Jun 20 PHP
php外部执行命令函数用法小结
Oct 11 PHP
PHP从二维数组得到N层分类树的实现代码
Oct 11 PHP
自制PHP框架之设计模式
May 07 PHP
iis6手工创建网站后无法运行php脚本的解决方法
Jun 08 PHP
PHP判断json格式是否正确的实现代码
Sep 20 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
复杂检索数据并分页显示的处理方法
2006/10/09 PHP
用PHP实现维护文件代码
2007/06/14 PHP
php使用类继承解决代码重复的问题
2015/02/11 PHP
php隐藏实际地址的文件下载方法
2015/04/18 PHP
ThinkPHP里用U方法调用js文件实例
2015/06/18 PHP
php类常量用法实例分析
2015/07/09 PHP
php连接mysql之mysql_connect()与mysqli_connect()的区别
2020/07/19 PHP
学习jquery之一
2007/04/27 Javascript
javascript 单例/单体模式(Singleton)
2011/04/07 Javascript
js arguments,jcallee caller用法总结
2013/11/30 Javascript
jquery实现checkbox全选全不选的简单实例
2013/12/31 Javascript
JavaScript获取某年某月的最后一天附截图
2014/06/23 Javascript
Jquery对象和Dom对象的区别分析
2014/11/20 Javascript
js鼠标点击图片实现随机变换图片的方法
2015/02/16 Javascript
js实现两点之间画线的方法
2015/05/12 Javascript
js对字符串进行编码的方法总结(推荐)
2016/11/10 Javascript
BootStrap中
2016/12/10 Javascript
快速使用node.js进行web开发详解
2017/04/26 Javascript
详解使用React进行组件库开发
2018/02/06 Javascript
对vue里函数的调用顺序介绍
2018/03/17 Javascript
JavaScript中常用的3种弹出提示框(alert、confirm、prompt)
2020/11/10 Javascript
Python 中 list 的各项操作技巧
2017/04/13 Python
对python3 中方法各种参数和返回值详解
2018/12/15 Python
Python中dict和set的用法讲解
2019/03/28 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
2019/07/11 Python
基于django2.2连oracle11g解决版本冲突的问题
2020/07/02 Python
如何利用python读取micaps文件详解
2020/10/18 Python
pycharm实现猜数游戏
2020/12/07 Python
int *p=NULL和*p= NULL有什么区别
2014/10/23 面试题
如何写一个自定义标签
2012/12/28 面试题
解释一下ruby中的特殊方法与特殊类
2013/02/26 面试题
物理教师自荐信范文
2013/12/28 职场文书
函授毕业个人自我评价
2014/02/20 职场文书
幼儿园的门卫岗位职责
2014/04/10 职场文书
教你如何使用Python开发一个钉钉群应答机器人
2021/06/21 Python
python 进阶学习之python装饰器小结
2021/09/04 Python