1

我在我的 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,参考文档

当我查找有关错误 UT000077 的详细信息时,它显示“Apache httpd 不支持开箱即用的 HTTP 升级”我了解 Websocket 通信需要 HTTP 升级。建议使用 mod_proxy_wstunnel。但是,此配置的详细信息不可用。

非常感谢任何指针/建议。

4

3 回答 3

3

在给出这个答案时,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>

[“默认”是 http 侦听器的名称]

您还需要在 httpd 中加载 mod_proxy_wstunnel

于 2015-02-19T11:41:02.480 回答
1

MODCLUSTER-438对 mod_cluster 的 WebSocket 支持

于 2015-02-17T12:36:46.850 回答
0

让我在这个问题中给正在使用 Apache 2.2.x 的人们两分钱 如果您使用的是 Apache 2.2.x,您需要从 Apache 2.4 为 Apache 2.2.x 编译 mod_proxy_wstunnel 这个链接有一个如何做。接下来,要使用 mod_cluster 实现 WebSocket,您还需要按照此链接中的说明编译 mod_cluster 1.3.3+,并在您的虚拟主机外部的 mod_cluster.conf 中添加 EnableWsTunnel

我希望有所帮助。

于 2016-11-03T17:52:04.137 回答