我在PHP中有一个客户端/服务器守护程序,它根据请求分叉。进程A和B可以使用进程间通信(IPC)与socket_create_pair中描述的方法进行通信。但是,如果B处理的请求再次(进入进程C)处理B退出后的长时间运行任务,则C只能在原始IPC对上进行通信直到B退出(因为A在处理SIGCHLD时丢弃套接字) ,A真的不知道C存在。)
A -> listening process
B -> forked request process, will fork C
C -> forked request continuing a long task as B returns "In progress..." to the user.
(C can talk to A as long as B has not exited)
这是有问题的,因为A管理一些只能由IPC请求的资源,而C自然可能最终导致对A的IPC请求永远阻塞。此外,如果B和C同时发送任何IPC,则存在数据损坏的风险。
我已经看到了passing sockets between processes的策略,但这在PHP的套接字界面中似乎无法实现。我可以使用非配对套接字监听A可以发送请求的A,但这是一种方式。 PHP中是否还有其他策略来实现A和C之间的双向IPC?