有没有人知道是否已经有用于apache的zmq模块?如果有请分享链接或任何参考。我的方案如下:
服务器配置:
我的问题是,每当我尝试从我的应用程序创建一个zmq套接字(pub)连接到一个单独的服务(SUB),其间有一个流媒体设备,它会在每次初始化应用程序时创建一个新的套接字,因为我的apache是在prefork模式下,在每个请求上创建新实例(子)。如何创建单个上下文/套接字,其中来自后续apache子进程的任意数量的PHP请求可以将数据发送到套接字,这将避免创建多个套接字并耗尽系统资源。我相信,这也将减少由于创建新套接字而导致的开销,并使其更快。
作为替代方案,可以创建一个apache模块,我可以从PHP应用程序访问其功能和资源,并使用它来发送数据,其中上下文和套接字只创建一次,并且在apache加载期间是持久的
答案 0 :(得分:1)
简短回答 - 你不能。你的问题是Apache及其工作原理 - 它在请求完成后关闭PHP进程。此外,您无法在PHP进程之间共享在Apache进程中创建的上下文或套接字。
我不知道你要做什么或为什么你甚至耗尽系统资源(很奇怪),但如果我是你,我会使用一个更高级的服务器,在内部使用ZeroMQ作为传输层:{ {3}}。您可以创建一个PHP扩展,通过FPM提供PHP,然后向您的PHP-FPM提供Apache代理请求,然后可以汇集已有的ZMQ连接。但是,我会扩大问题,说明资源如何快速耗尽。
如果那太多了,那么你可以考虑一下:
SIGUSR2
SIGUSR2
上激活并通过ZMQ套接字发送数据 - 你现在有一个使用ZMQ的进程和多个与之交互的PHP进程由于您的要求有点不清楚,所以我写的所有内容都很有可能,如果您可以通过更多信息稍微扩展您的问题。