意见箱
恒创运营部门将仔细参阅您的意见和建议,必要时将通过预留邮箱与您保持联络。感谢您的支持!
意见/建议
提交建议

PHP消息队列是什么,怎样创建消息队列和定义消息类型

来源:恒创科技 编辑:恒创科技编辑部
2024-01-10 21:51:59
这篇文章主要介绍“PHP消息队列是什么,怎样创建消息队列和定义消息类型”的相关知识,下面会通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“PHP消息队列是什么,怎样创建消息队列和定义消息类型”文章能帮助大家解决问题。



PHP消息队列是什么,怎样创建消息队列和定义消息类型


说明

1、消息队列是存放在内存中的一个队列。

2、由于消息队列去数据是,只有一个进程能去到,所以不需要额外的锁或信号量。

实例

echo"parentprogresspid:{$parentPid}\n";$childList=array();
//创建消息队列,以及定义消息类型(类似于数据库中的库)
$id=ftok(__FILE__,'m');
$msgQueue=msg_get_queue($id);
constMSG_TYPE=1;
//生产者
functionproducer(){
global$msgQueue;
$pid=posix_getpid();
$repeatNum=5;
for($i=1;$i<=$repeatNum;$i++){
$str="({$pid})progresscreate!{$i}";
msg_send($msgQueue,MSG_TYPE,$str);
$rand=rand(1,3);
sleep($rand);
}
}
//消费者
functionconsumer(){
global$msgQueue;
$pid=posix_getpid();
$repeatNum=6;
for($i=1;$i<=$repeatNum;$i++){
$rel=msg_receive($msgQueue,MSG_TYPE,$msgType,1024,$message);
echo"{$message}|consumer({$pid})destroy\n";
$rand=rand(1,3);
sleep($rand);
}
}
functioncreateProgress($callback){
$pid=pcntl_fork();
if($pid==-1){
//创建失败
exit("forkprogresserror!\n");
}elseif($pid==0){
//子进程执行程序
$pid=posix_getpid();
$callback();
exit("({$pid})childprogressend!\n");
}else{
//父进程执行程序
return$pid;
}
}
//3个写进程
for($i=0;$i<3;$i++){
$pid=createProgress('producer');
$childList[$pid]=1;
echo"createproducerchildprogress:{$pid}\n";
}
//2个写进程
for($i=0;$i<2;$i++){
$pid=createProgress('consumer');
$childList[$pid]=1;
echo"createconsumerchildprogress:{$pid}\n";
}
//等待所有子进程结束
while(!empty($childList)){
$childPid=pcntl_wait($status);
if($childPid>0){
unset($childList[$childPid]);
}
}
echo"({$parentPid})mainprogressend!\n";


关于“PHP消息队列是什么,怎样创建消息队列和定义消息类型”的内容今天就到这,感谢各位的阅读,大家可以动手实际看看,对大家加深理解更有帮助哦。如果想了解更多相关内容的文章,关注我们,恒创科技小编每天都会为大家更新不同的知识。

上一篇: 如何理解PHP信号量和共享内存的定义和实例 下一篇: 手机怎么远程登录云服务器?