介绍
这篇文章主要介绍了php中通过命名管道实现跨语言进程间通信的案例,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。
<强>进程通信:强>
1,中断系统
2,无名管道【半双工通信】
只能用于父子进程,兄弟进程之间的通信,且没有名字,称为无名管道,传输的数据是无格式的,双方可自己定义格式,不依赖于文件系统。
3,命名管道
用于无名管道无法实现的骚操作,没任何关系的进程也能进行通信【就是依赖于一个文件描述符,只不过这文件是一个FIFO类型的文件即管道文件,遵守FIFO原则,即队列先进先出】
PS:务必了解进程阻塞,非阻塞原理,管道文件,进程【运行状态转移】
应用场景举例说明:如使用php的套接字API编写一个类似workerman的网络框架,可以做统一中断信号事件处理
中断处理程序只负责接受中断请求,通过管道写端写入数据,主进程通过监听文件描述符上的事件【可读事件【可以私下去撸一下流套接字相关API,以及了解下IO复用函数的使用方法】再处理,不会让中断处理程序等待过长的时间。
当然通过命名管道也可以实现跨语言进程间的通信。
$ filePath=$ argv [1]; 如果(posix_mkfifo (filePath 0666美元)& lt; 0) { 流(STDOUT,“命名管道创建错误“); 退出(0); } $ fd=fopen (filePath美元,“w"); 而(is_resource (fd)美元){ “流(STDOUT,“;;); $ data=https://www.yisu.com/zixun/fgets (STDIN); 如果(元数据){ 写入文件(fd,数据,美元strlen(元数据)); } } 退出(0);
$ filePath=$ argv [1]; 如果(posix_mkfifo (filePath 0666美元)& lt; 0) { 流(STDOUT,“命名管道创建错误“); 退出(0); } $ fd=fopen (filePath美元,“r"); 而(is_resource (fd)美元){ 美元$ data=https://www.yisu.com/zixun/fgets (fd); 如果(元数据){ 写入文件(STDIN,数据,美元strlen(元数据)); } } 退出(0);
感谢你能够认真阅读完这篇文章,希望小编分享php中通过命名管道实现跨语言进程间通信的案例内容对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,遇到问题就找,详细的解决方法等着你来学习!