PHP 中的进程间通信


Inter-process communication in PHP

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

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

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

另一个(老式的选择(是使用 xinetd;让你的守护进程由 xinetd 启动和管理。在这里,您实际上是使用套接字重新连接 stdin 和 stdout,方法是将其外包给 xinetd 守护进程。