У меня есть клиент / серверный демон в PHP, который разветвляется на запрос. Процессы A и B могут общаться с использованием межпроцессного взаимодействия (IPC) с помощью метода, описанного в socket_create_pair. Однако если запрос, обрабатываемый B, снова разветвляется (в процесс C) для обработки долго выполняющейся задачи после выхода из B, C может обмениваться данными по исходной паре IPC с A только до выхода B (поскольку A отбрасывает сокет при обработке SIGCHLD и А действительно понятия не имеет, С существует).
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, естественно, может в конечном итоге вызвать запрос IPC к A, который блокируется навсегда. Кроме того, существует риск повреждения данных, если B и C отправляют какой-либо IPC одновременно.
Я видел стратегии для передача сокетов между процессами, но это не представляется возможным в интерфейсе сокетов PHP. Я мог бы использовать непарный сокет прослушивания на A, на который C может отправлять запросы, но это один из способов. Есть ли в PHP какая-либо другая стратегия для реализации двунаправленного IPC между A и C?
Задача ещё не решена.
Других решений пока нет …