Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';在PHP中进行进程间通信的最简单方法是什么?_Php_Sockets_Ipc_Unix Socket - Fatal编程技术网

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

什么';在PHP中进行进程间通信的最简单方法是什么?,php,sockets,ipc,unix-socket,Php,Sockets,Ipc,Unix Socket,我用PHP编写了一个程序,不断更新数据库。我想让它在运行时吐出数据,这样其他进程就可以读取它并处理它 以下是我在图表中的意思: 我意识到我正在寻找某种进程间通信(IPC)来实现这一点,但我不确定在PHP中最简单/最简单的方法是什么 以下是我提出的两种可能的解决方案: 1。将主进程转入Unix套接字服务器。 我可以在主进程中添加一些套接字代码,将其转换到Unix套接字服务器,在套接字运行时处理连接并写入套接字。然后,其他进程可以连接并从套接字读取数据: 然而,这意味着主程序在完成其主要工作的同

我用PHP编写了一个程序,不断更新数据库。我想让它在运行时吐出数据,这样其他进程就可以读取它并处理它

以下是我在图表中的意思:

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

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

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

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

然而,这意味着主程序在完成其主要工作的同时,还必须处理作为套接字服务器的问题。此外,PHP不支持开箱即用的线程,这使得处理多个连接变得有点棘手,因此整个程序将变得更加复杂

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

2。创建一个单独的Unix套接字服务器。

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

这样做的好处是将套接字服务职责与主进程分离。它还将使连接处理更加简单,因为我可以用更适合作为套接字服务器的语言编写它

但另一方面,这确实意味着我需要编写和运行一个额外的程序来帮助我处理进程间的通信

有更简单的解决方案吗?

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

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


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

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

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


听起来你只需要一个SQLite数据库:)在SQLite数据库中吐出数据,不要使用事务(或使事务非常短暂),让感兴趣的程序读取数据库文件

Redis有PHP绑定,客户端使用C/C++、Python、bash等。你可以使用发布/订阅、队列、,散列和大量其他数据结构。我使用Redis。它可以存储数据、列表和做很多其他事情。它还可以进行发布和订阅。当然还有很多其他的解决方案。谢谢@MarkSetchell和ryantxr,Redis看起来是我想要的一个很好的解决方案。sqlite根本不是合适的候选者。它不是为这个目的设计的,效率低下。memcached会好得多,但它仍然有相当大的开销。