php - ZeroMQ Apache 模块

标签 php apache sockets zeromq apache-modules

有谁知道是否已经有 apache 的 zmq 模块?如果有请分享链接或任何引用。我的情况如下:

服务器配置:

  • Apache 2.4.12,带有 prefork
  • PHP 5.5
  • ZMQ 4.0.X

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

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

    最佳答案

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

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

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

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

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

    关于php - ZeroMQ Apache 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31611069/

    相关文章:

    PHP 重命名包含 utf-8 阿拉伯字符集字符串的文件名失败

    php - 如何使用 Curl PHP 从任何电子商务网站获取产品的价格和尺寸

    apache - mod_expires 为 3## 状态码发送 Cache-Control header

    Python 请求 : having a space in header for posting

    apache - .htaccess 文件会不会太大

    c++ - 引用或复制结构的结构(分配了 memset)是有效的事情吗?

    vb.net - 如何ping代理?即在IP :PORT format

    php - 如何根据mysql数据库中的关键字或字符串进行选择?

    sockets - 通过 Node.js 套接字测量数据的平均传输速率

    PHP CLI 不会记录错误