在PHP中进行进程间通信的最简单方法是什么?

时间:2018-11-17 21:21:09

标签: php sockets ipc unix-socket

我用PHP编写了一个不断更新数据库的程序。我希望它在运行时吐出数据,以便其他进程可以读取它并对其进行处理。

这就是我在图中的意思:

我意识到我正在寻找某种进程间通信(IPC)来实现这一目标,但是我不确定最简单的方法是什么在PHP 中。

以下是我提出的两种可能的解决方案:

1。将主进程转到Unix套接字服务器。

我可以在主进程中添加一些套接字代码,以将其提交给Unix套接字服务器,处理连接并在套接字运行时写入套接字。然后其他进程可以连接并从套接字读取数据:

但是,这意味着主程序必须既要作为套接字服务器又要完成其主要任务。此外,PHP不支持开箱即用的线程,这使得处理多个连接变得有些棘手,因此整个程序将变得更加复杂。

总的来说,这似乎不是最简单的解决方案,尤其是对于用PHP编写的程序而言。

2。创建一个单独的Unix Socket服务器。

或者,我可以编写一个主进程可以写入的单独的Unix Socket服务器程序,它将所有写操作中继到与其连接的任何其他进程:

这具有将套接字服务职责与主要流程分开的好处。它将使连接处理变得更加简单,因为我可以使用更适合作为套接字服务器的语言来编写它。

但是,另一方面,这确实意味着我需要编写并运行一个附加程序来帮助我处理进程间通信。

有没有更简单的解决方案?

到目前为止,选项2是我首选的解决方案,但是在这里我可能缺少一些替代方法吗?

同样,我只希望现有的PHP进程在运行时吐出一些数据,并让其他进程能够从中读取数据。

这种进程间通信有哪些简单的解决方案?

2 个答案:

答案 0 :(得分:1)

您正在寻找类似ActiveMQ的东西,这将使您可以将数据“发布”到队列,然后可以将其他脚本/进程作为该队列的订阅者。基本上,订户将在数据可用时提取数据。出于分发数据的目的,它非常易于配置和使用。

您还可以使用PHP Stomp之类的类来简化消息传递的实现。

Apache ActiveMQ

PHP Stomp

答案 1 :(得分:0)

听起来像您需要的是一个SQLite数据库:)在SQLite db中吐出数据,并且不使用事务(或使事务非常短暂)并且有兴趣的程序读取db文件〜