Apache 为每个 WebSocket 连接保留一个活跃的 worker
Apache keeps an active worker for each WebSocket connection
将 Apache (2.4.29) 配置为 WebSocket 请求的反向代理 mod-proxy-wstunnel
:
ProxyPass "/myapp/ws" "ws://localhost:8080/myapp/ws"
对于每个活动的 WebSocket 客户端,我看到一个 Apache worker 保持活动状态(处于 "Sending Reply" 状态),只要该客户端保持活动状态,即使没有数据正在发送也是如此。实际上,这意味着我无法扩展 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
配置(使用 event、worker 和 prefork 测试)对此没有影响。
我需要 Apache 能够在这些工作人员闲置(不传输任何数据)时重用这些工作人员,以便能够对其进行扩展。可能吗?
不,目前无法通过这种方式多路复用 websockets 连接。
在 httpd 主干 (2.5.x) 中,有一些实验性选项允许这些连接在空闲一段时间后变为异步。但它不太可能被移植到 2.4.x 并且目前还没有真正稳定的 2.6.x。
将 Apache (2.4.29) 配置为 WebSocket 请求的反向代理 mod-proxy-wstunnel
:
ProxyPass "/myapp/ws" "ws://localhost:8080/myapp/ws"
对于每个活动的 WebSocket 客户端,我看到一个 Apache worker 保持活动状态(处于 "Sending Reply" 状态),只要该客户端保持活动状态,即使没有数据正在发送也是如此。实际上,这意味着我无法扩展 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
配置(使用 event、worker 和 prefork 测试)对此没有影响。
我需要 Apache 能够在这些工作人员闲置(不传输任何数据)时重用这些工作人员,以便能够对其进行扩展。可能吗?
不,目前无法通过这种方式多路复用 websockets 连接。
在 httpd 主干 (2.5.x) 中,有一些实验性选项允许这些连接在空闲一段时间后变为异步。但它不太可能被移植到 2.4.x 并且目前还没有真正稳定的 2.6.x。