【问题标题】:ZeroMQ apache moduleZeroMQ Apache 模块
【发布时间】:2015-10-15 03:47:40
【问题描述】:

有人知道是否已经有用于 apache 的 zmq 模块吗?如果有请分享链接或任何参考。我的场景如下:

服务器配置:

  1. Apache 2.4.12,带有 prefork
  2. PHP 5.5
  3. ZMQ 4.0.X

我的问题是,每当我尝试从我的应用程序创建一个 zmq socket(pub) 连接到一个单独的服务 (SUB) 时,它会在每次应用程序初始化为我的 apache 时创建一个新的套接字在 prefork 模式下,在每个请求上创建新实例(子)。如何创建单个上下文/套接字,来自后续 apache 子进程的任意数量的 PHP 请求可以将数据发送到套接字,这将避免创建多个套接字并耗尽系统资源。我相信,这也将减少由于创建新套接字而导致的开销并使其更快。

作为替代方案,是否可以创建一个 apache 模块,我可以从 PHP 应用程序访问其功能和资源并使用它来发送数据,其中上下文和套接字仅创建一次,并且在 apache 加载期间是持久的.

【问题讨论】:

  • 所以基本上你想要一个 PHP 可以使用的连接池,类似于它对 MySQL 连接所做的事情?
  • 是的!如..它只是创建一个上下文和套接字,然后我将数据流式传输到它!它相似但不一样!

标签: php apache sockets zeromq apache-modules


【解决方案1】:

简短的回答 - 你不能。你的问题是 Apache 以及它是如何工作的 - 它在请求完成后关闭 PHP 进程。此外,您不能在 PHP 进程之间共享在 Apache 进程中创建的上下文或套接字。

我不知道您要做什么,也不知道您为什么会耗尽系统资源(很奇怪),但如果我是您,我会使用更高级的服务器,该服务器在内部使用 ZeroMQ 作为其传输层:@ 987654321@。您可以创建一个 PHP 扩展,通过 FPM 提供 PHP,然后向您的 PHP-FPM 发出 Apache 代理请求,然后它可以汇集已经存在的 ZMQ 连接。但是,我会用资源如何快速耗尽来扩展问题。

如果这太多了,那么你可以考虑这个:

  • Apache 生成的 PHP 进程接受数据并填充某种存储(数据库、文件、共享内存)
  • 填充临时队列后,在退出 PHP 脚本之前,为读取队列的守护进程引发 SIGUSR2
  • 您有一个正在运行的守护程序,它读取队列、激活 SIGUSR2 并通过 ZMQ 套接字发送数据 - 您现在有一个使用 ZMQ 的进程和多个与之交互的 PHP 进程

由于您的要求有点不清楚,很可能我写的一切都是徒劳的,所以如果您可以通过更多信息稍微扩展您的问题。

【讨论】:

    猜你喜欢
    • 2013-10-30
    • 2012-02-27
    • 2013-04-19
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-22
    相关资源
    最近更新 更多