有谁知道是否已经有 apache 的 zmq 模块?如果有请分享链接或任何引用。我的情况如下:
服务器配置:
我的问题是,每当我尝试从我的应用程序创建一个 zmq 套接字(pub)连接到一个单独的服务(SUB)时,它都会在每次初始化应用程序时创建一个新套接字,因为我的 apache 处于 prefork 模式,在每个请求上创建新实例(子)。如何创建单个上下文/套接字,其中来自后续 apache 子进程的任意数量的 PHP 请求可以将数据发送到套接字,这将避免创建多个套接字并耗尽系统资源。我相信,这也将减少由于创建新套接字而导致的开销并使其更快。
作为替代方案,可以创建一个 apache 模块,我可以从 PHP 应用程序访问其功能和资源,并使用它来发送数据,其中上下文和套接字仅创建一次,并且在 apache 加载期间是持久的。
最佳答案
简短的回答 - 你不能。你的问题是 Apache 以及它是如何工作的 - 它在请求完成后关闭 PHP 进程。此外,您不能在 PHP 进程之间共享在 Apache 进程中创建的上下文或套接字。
我不知道您要做什么,也不知道为什么您甚至会耗尽系统资源(很奇怪),但如果我是您,我会使用更高级的服务器,该服务器在内部使用 ZeroMQ 作为其传输层:Mongrel2 .您可以创建一个 PHP 扩展,通过 FPM 提供 PHP,然后向您的 PHP-FPM 发出 Apache 代理请求,然后它可以汇集已经存在的 ZMQ 连接。但是,我会用资源如何快速耗尽来扩展这个问题。
如果这太多了,那么你可以考虑这个:
SIGUSR2
用于读取队列的守护进程SIGUSR2
时激活并通过 ZMQ 套接字发送数据 - 您现在有一个使用 ZMQ 的进程和多个与之交互的 PHP 进程 由于您的要求有点不清楚,很可能我写的一切都是徒劳的,所以如果您可以通过更多信息稍微扩展您的问题。
关于php - ZeroMQ Apache 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31611069/