【问题标题】:Apache keeps an active worker for each WebSocket connectionApache 为每个 WebSocket 连接保留一个活动工作器
【发布时间】:2019-01-21 07:50:06
【问题描述】:

将 Apache (2.4.29) 配置为带有 mod-proxy-wstunnel 的 WebSocket 请求的反向代理:

ProxyPass "/myapp/ws" "ws://localhost:8080/myapp/ws"

对于每个活动的 WebSocket 客户端,我看到一个 Apache 工作人员保持活动状态(处于“发送回复”状态),只要该客户端保持活动状态,即使没有发送数据也是如此。实际上,这意味着我无法扩展 WebSocket 客户端,因为所有可用的连接都已被消耗。

在 /server-status 中,每个客户端都有这样一行:

Srv PID Acc M   CPU SS  Req Conn    Child   Slot    Client  Protocol    VHost   Request
0-0 10219   0/43/43 _   1.04    1828    984237  0.0 0.09    0.09    ::1 http/1.1    butler.openbravo.com:443    GET /myapp/ws/helloWs HTTP/1.1

使用不同的mpm 配置(使用事件、工作者和预分叉测试)对此没有影响。

我需要 Apache 能够在这些工作人员闲置时重用它们(不传输任何数据),以便能够对其进行扩展。有可能吗?

【问题讨论】:

    标签: apache websocket apache2 mod-proxy mod-proxy-wstunnel


    【解决方案1】:

    不,目前无法以这种方式多路复用 websockets 连接。

    在 httpd trunk (2.5.x) 中,有一些实验选项允许这些连接在空闲一段时间后异步。但它不太可能被向后移植到 2.4.x,而且目前还没有真正稳定的 2.6.x。

    【讨论】:

    • 我应该补充一点,我相信明确询问的多路复用根本不可能,因为由于有效负载是完全任意的,因此无法反转流量的去向。
    猜你喜欢
    • 1970-01-01
    • 2021-11-25
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多