PHP多进程通信-消息队列使用
向消息队列发送数据并获取数据的测试
?php$key=ftok(__FILE__,' a ');//获取消息队列$queue=msg_get_queue($key,0666);//发送消息//msg_send($queue,1,' Hello,1 ');//接收一条消息,如果没有收到,会阻塞msg _ receive ($ queue,1,$ message _ type,1024,$ message 1);//remove message//msg _ remove _ queue($ queue);//var _ dump($ message 1);
?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=范围(1,100,000);//把任务放到队列中,让多个子进程并行处理foreach($ arr as $ val){ $ status=msg _ send($ msg _ queue,1,$ val);us LEEP(1000);} $ pidarr[]=$ PID;msg _ remove _ queue($ msg _ queue);} else {//子进程收到任务后,fork10子进程处理任务。for($ I=0;$ i10$ I){ $ child PID=pcntl _ fork();if($ child PID){ $ pidarr[]=$ child PID;//collect subprocess processid } else { while(true){ msg _ receive($ msg _ queue,0,$ msg _ type,1024,$ message);if(!$message)退出(0);回显$消息。PHP _ EOLus LEEP(1000);} } } }//防止主进程先于子进程退出,形成僵尸进程,而(count($ pidar)0){ foreach($ pidar as $ key=$ PID){ $ status=pcntl _ waitpid($ PID,$ status);if($ status==-1 | | $ status 0){ unset($ pidarr[$ key]);} }睡眠(1);}
以上就是边肖介绍的PHP通信-消息队列的详细讲解和集成,希望对大家有所帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!
版权声明:PHP多进程通信-消息队列使用是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。