代码之家  ›  专栏  ›  技术社区  ›  alostale

Apache为每个WebSocket连接保留一个活动的worker

  •  0
  • alostale  · 技术社区  · 7 年前

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

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

    对于每个活动的WebSocket客户机,我看到一个Apache工作机,只要这个客户机保持活动状态(处于“Sending Reply”状态),即使没有发送数据。实际上,这意味着我不能扩展WebSocket客户机,因为所有可用的连接都被消耗掉了。

    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 配置(使用event、worker和prefork测试)对此没有影响。

    1 回复  |  直到 7 年前
        1
  •  1
  •   covener    7 年前

    不,目前无法通过这种方式多路传输WebSocket连接。

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