我在运行一个使用 Spring WebSockets 4.1.6、Tomcat 7.0.54 和 Apache 2.4.16 作为 Web 服务器的简单应用程序时遇到了一些麻烦。
我在互联网上阅读了很多帖子,但我不知道发生了什么。服务器启动没有问题。我在我的服务器项目中发布了一个 index.html,它启动了一个 WebSocket 连接。
如果我直接从 Tomcat 访问这个文件,它就可以完美运行。
http://localhost:8080/myserver/messaging/index.html
但是如果我从 Apache 服务器访问这个文件,它就不起作用。
http://localhost/messages/messaging/index.html
在我的 Apache 服务器中,我配置了一个代理通道:
ProxyPass /messages http://localhost:8080/myserver
ProxyPassReverse /messages http://localhost:8080/myserver
我的服务器 WebSocket 配置如下所示:
@Configuration
@EnableWebSocketMessageBroker
public class PuiWebSocketConfig extends
AbstractWebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.setApplicationDestinationPrefixes("/app");
config.enableSimpleBroker("/user", "/topic");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/puimessaging").withSockJS();
}
}
我的客户按如下方式进行连接:
function connect() {
var socket = new SockJS('/server/puimessaging');
var stompClient = Stomp.over(socket);
var headers = {
puiSessionId : 'a1234567890z'
};
stompClient.connect(headers, function(frame) {
setConnected(true);
stompClient.subscribe('/user/a1234567890z/response', function(data) {
...
});
});
}
服务器抛出一个错误,说我需要启用异步支持,但我不知道该怎么做。
Async support must be enabled on a servlet and for all filters involved
in async request processing. This is done in Java code using the Servlet
API or by adding "<async-supported>true</async-supported>" to servlet and
filter declarations in web.xml. Also you must use a Servlet 3.0+ container
我试图在我的 web.xml 文件中添加该属性,但它不起作用:
<servlet>
<servlet-name>spring-mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>spring-mvc</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
任何想法?
提前致谢。
马克