php 进程间通讯

进程间的通讯有几种方式,比如管道,消息,信号量等等。

php也是一样,当我们访问页面时,php会使用一个空闲的进程来处理我们的请求。

大部分情况下,我们会使用数据库,来记录数据,而php进程间的通信,做为web服务,基本上是不会用到的。

这里也成为一个盲区。

最近有机会和需要,研究了一下,还是有些收获。

一开始想到使用fifo,这种通信方式是在unix中学到的,查了php手册,也有这样的函数和使用方法。研究发现,这种方法的实际,就是文件的处理,只不过是一种特殊的文件。从手册给的例子中也可以看出,实现已经有输入输出数据的传递了。

http://php.net/manual/en/function.posix-mkfifo.php

看到这里很兴奋,但实现的时候,发现和现有的架构比较冲突。

现有的代码结构,进程间是使用信号量来传递和触发处理的,如果想使用fifo,必须要修改架构,改动比较大。

于是继续研究,找寻答案。

在php中有一组函数,是可以进行php进程间的消息通信的。

msg_get_queue — Create or attach to a message queue
msg_queue_exists — Check whether a message queue exists
msg_receive — Receive a message from a message queue
msg_remove_queue — Destroy a message queue
msg_send — Send a message to a message queue
msg_set_queue — Set information in the message queue data structure
msg_stat_queue — Returns information from the message queue data structure

使用上面几个函数就可以很简单的实现php进程间通信了。

再配合上信号量,就可以实现很多功能了。

http://www.php.net/manual/en/function.msg-receive.php

这个页面有些使用的实例可供参考

发表评论

电子邮件地址不会被公开。 必填项已用*标注