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

希望对你有所帮助。