PHP中的进程间通信

时间:2016-02-01 15:59:32

标签: php linux sockets unix ipc

我正在开发一个PHP平台,它为开发人员提供了一些功能,如cron作业,事件和WebSocket通信,为此我运行三个用PHP编写的不同守护进程,因此管理员可以禁用特定功能。当我启动它们时,在fork之后,守护进程启动器将PID保存在我的数据库中,然后包含守护进程PHP文件。我需要允许开发人员使用特定的PHP类轻松地与这些守护进程通信。我已经看到存在许多与进程通信的不同方法,我已经看过例如proc_open函数,但看起来必须运行一个新的命令来与它进行通信。我正在寻找类似PHP套接字的东西,但它允许我打开套接字到PID并且不使用端口(如果可能的话)以避免与其他守护进程套接字冲突。使用本机PHP工具的哪种方法更好?

还有一个细节:这些守护进程可能能够管理相当大的连接负载,事件也通过WebSocket或AJAX轮询传播给客户端,因此事件和WebSocket守护进程在它们之间进行通信。

1 个答案:

答案 0 :(得分:0)

使用基于流程的方法并重复使用相同的流程(从您的解释中推测),并在不使用套接字的情况下与其进行通信将很困难。如果您对服务器之外的可扩展性不感到困扰,那就没关系了。您必须至少使用套接字(网络或unix),然后使进程绑定并侦听随机端口,并将数据库中的端口号或unix路径与PID一起保存。

另一种(老式的选择)是利用xinetd;让你的守护进程由xinetd启动和管理。在这里,你真的使用套接字重新连接stdin和stdout,将它外包给xinetd守护进程。