wildfly 集群上的 Websocket 问题
Websocket issue on wildfly cluster
我在 Spring-JSF 集成应用程序中使用 richfaces a4j:push。我可以在 wildfly 8.0.0 的非集群环境中使用 websocket 将消息推送到浏览器。
当我使用 httpd 集群在 redhat enterprise 7.0 的 wildfly8.0.0 上部署应用程序时,推送消息不工作。
我在集群环境中收到以下错误:
17:15:22,862 ERROR [io.undertow.request] (default task-3) UT005023: Exception handling request to /star/__richfaces_push: java.lang.IllegalStateException: UT000077: The underlying transport does not support HTTP upgrade.
我的集群配置了mod_cluster,指的是document
当我查找有关错误 UT000077 的详细信息时,它说“Apache httpd 不支持开箱即用的 HTTP 升级”我了解到 websocket 通信需要 HTTP 升级。建议使用mod_proxy_wstunnel。但是,此配置的详细信息不可用。
非常感谢pointers/suggestions。
MODCLUSTER-438 mod_cluster
的 WebSocket 支持
在回答这个问题时,AJP [这是默认的] 不支持 HTTP 升级,因此不支持 websocket。
如果你切换到 HTTP websocket 将工作。
您需要进行以下更改才能切换到 AJP
改变
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
到
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
[注释掉 proxy_ajp_module 并添加 proxy_http_module]
在 modcluster 子系统中
改变
<subsystem xmlns="urn:jboss:domain:modcluster:1.2">
<mod-cluster-config advertise-socket="modcluster" connector="ajp">
<dynamic-load-provider>
<load-metric type="cpu"/>
</dynamic-load-provider>
</mod-cluster-config>
</subsystem>
到
<subsystem xmlns="urn:jboss:domain:modcluster:1.2">
<mod-cluster-config advertise-socket="modcluster" connector="default">
<dynamic-load-provider>
<load-metric type="cpu"/>
</dynamic-load-provider>
</mod-cluster-config>
</subsystem>
[“default”是http监听器的名称]
您还需要在您的 httpd
中加载 mod_proxy_wstunnel
让我把这个问题的两分钱给使用 Apache 2 的人。2.x 如果您使用的是 Apache 2。2.x 您需要编译 mod_proxy_wstunnel 来自Apache 2.4 for Apache 2.2.x 此 link have a how to do it. Following, to achieve WebSockets with mod_cluster you need also compile mod_cluster 1.3.3+ as described in this link 并在您的 mod_cluster.conf 虚拟主机外添加 EnableWsTunnel
希望对你有所帮助。
我在 Spring-JSF 集成应用程序中使用 richfaces a4j:push。我可以在 wildfly 8.0.0 的非集群环境中使用 websocket 将消息推送到浏览器。 当我使用 httpd 集群在 redhat enterprise 7.0 的 wildfly8.0.0 上部署应用程序时,推送消息不工作。
我在集群环境中收到以下错误:
17:15:22,862 ERROR [io.undertow.request] (default task-3) UT005023: Exception handling request to /star/__richfaces_push: java.lang.IllegalStateException: UT000077: The underlying transport does not support HTTP upgrade.
我的集群配置了mod_cluster,指的是document
当我查找有关错误 UT000077 的详细信息时,它说“Apache httpd 不支持开箱即用的 HTTP 升级”我了解到 websocket 通信需要 HTTP 升级。建议使用mod_proxy_wstunnel。但是,此配置的详细信息不可用。
非常感谢pointers/suggestions。
MODCLUSTER-438 mod_cluster
的 WebSocket 支持在回答这个问题时,AJP [这是默认的] 不支持 HTTP 升级,因此不支持 websocket。
如果你切换到 HTTP websocket 将工作。
您需要进行以下更改才能切换到 AJP
改变
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
#LoadModule proxy_http_module modules/mod_proxy_http.so
到
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
[注释掉 proxy_ajp_module 并添加 proxy_http_module]
在 modcluster 子系统中
改变
<subsystem xmlns="urn:jboss:domain:modcluster:1.2">
<mod-cluster-config advertise-socket="modcluster" connector="ajp">
<dynamic-load-provider>
<load-metric type="cpu"/>
</dynamic-load-provider>
</mod-cluster-config>
</subsystem>
到
<subsystem xmlns="urn:jboss:domain:modcluster:1.2">
<mod-cluster-config advertise-socket="modcluster" connector="default">
<dynamic-load-provider>
<load-metric type="cpu"/>
</dynamic-load-provider>
</mod-cluster-config>
</subsystem>
[“default”是http监听器的名称]
您还需要在您的 httpd
中加载 mod_proxy_wstunnel让我把这个问题的两分钱给使用 Apache 2 的人。2.x 如果您使用的是 Apache 2。2.x 您需要编译 mod_proxy_wstunnel 来自Apache 2.4 for Apache 2.2.x 此 link have a how to do it. Following, to achieve WebSockets with mod_cluster you need also compile mod_cluster 1.3.3+ as described in this link 并在您的 mod_cluster.conf 虚拟主机外添加 EnableWsTunnel
希望对你有所帮助。