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

标签 php sockets ipc unix-socket

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

这是我在图中的意思:



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

这是我提出的两个可能的解决方案:

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

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



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

总之,这似乎不是最简单的解决方案,特别是对于用PHP编写的程序(不幸的是)。

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

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



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

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

有更简单的解决方案吗?

到目前为止,选项2是我的首选解决方案,但是是否有一些其他方法可能会在这里丢失?

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

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

最佳答案

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

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

Apache ActiveMQ

PHP Stomp

关于php - 在PHP中进行进程间通信的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53355698/

相关文章:

java - 无法将套接字从 Android 客户端应用程序连接到服务器

javascript - Electron + angularjs IPC机制

c - 杀死运行系统 shell 命令的子进程

php - 使用 URL 或 php 在 iframe 中加载页面

php - 统计一些有限的单词并显示它们与他们的名字相对应

java - DatagramSocket : File sending, 客户端未收到图像文件

python - 将登录数据包发送到 Python 中的 Minecraft 服务器不起作用

允许确定哪个 PID 正在使用它们的跨平台同步原语

php - 循环遍历单行的列

PHP 脚本耗时太长并且超时