<?php
/**
* Created by PhpStorm
* User: 北溟有鱼QAQ
* Date: 2021-09-01
* Time: 15:26
* Email: 1769360227@qq.com
*/
$file = 'pipe_file';
//检测是否存在管道文件
if(!posix_access($file,POSIX_F_OK))
{
//创建管道文件
if(posix_mkfifo($file,0666))
{
fprintf(STDOUT,"create ok\r\n");
}
}
//以读方式打开文件
$fd = fopen($file,'r');
//设置非阻塞方式
stream_set_blocking($fd,0);
while (1)
{
$data = fread($fd,64);
if($data){
fprintf(STDOUT,"pid=%d recv data=%s",getmypid(),$data);
}
}
fclose($fd);
<?php
/**
* Created by PhpStorm
* User: 北溟有鱼QAQ
* Date: 2021-09-01
* Time: 15:06
* Email: 1769360227@qq.com
*/
$file = 'pipe_file';
//检测是否存在管道文件
if(!posix_access($file,POSIX_F_OK))
{
//创建管道文件
if(posix_mkfifo($file,0666))
{
fprintf(STDOUT,"create ok\r\n");
}
}
$fd = fopen($file,'w');
while (1)
{
$data = fgets(STDIN,64);
if($data){
$len = fwrite($fd,$data);
fprintf(STDOUT,"pid=%d write len = %d \n",getmypid(),$len);
}
}
fclose($fd);
通过以上图片可以发现,我们实现了不同进程间的通信,这样就可以方便一些同学在使用workman 、swoole 配合其他 fpm框架使用的时候,、拿到跨进程的数据,从而实现自己的业务逻辑
找到管道文件,使用cat pipe_file
也相当于读取管道内容
当一个读进程 多个写进程时,读进程是可以正常工作获取管道内容的
当一个写进程,多个读进程时,读进程会依次从管道中哪去数据,也是可以正常工作(类似于消息队列)
切记,读进程一定要设置非阻塞方式运行,否则可能会出现不同效果,导致认为代码错误
本文为北溟有鱼QAQ原创文章,转载无需和我联系,但请注明来自北溟有鱼QAQ https://www.amdzz.cn
最新评论