我有一个spring boot war文件,我正在部署到tomcat 7.0.78实例。 Web应用程序启动正常,但Web套接字无法正常工作。它们在嵌入式tomcat环境中运行良好,例如正在运行./gradlew bootRun
。
我在Chrome控制台中遇到的错误是:
angular.js:14525 Possibly unhandled rejection: Whoops! Lost connection to http://localhost:8080/websock
我尝试将tomcat连接器设置为使用Http11NioProtocol,但似乎没有任何效果。
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" />
我也尝试将其设置为ROOT.war,然后浏览显示:WebSocket connection to 'ws://localhost:8080/websock/424/wzkek0zw/websocket' failed: Error during WebSocket handshake: Unexpected response code: 500.
在tomcat配置文件中是否存在某些东西我缺少正确启用websockets?我的Web套接字配置类如下所示:
@Configuration
@EnableWebSocketMessageBroker
@EnableWebSocket
public class WebSocketConfiguration extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/websock").setAllowedOrigins("*").withSockJS();
}
}
我没有在web.xml中编辑任何内容,只更改了server.xml中的连接器协议。
更新: 我的问题的部分原因是我的连接尝试在前面有一个斜线,例如 $ stomp.connect('/ websock'),所以我把它改成$ stomp.connect('websock')。这在tomcat的windows安装上工作正常,但在ubuntu安装上不起作用。我必须明确告诉它在我的javascript中连接到http://localhost:8080/websock,但是当我尝试连接到Web套接字时出现错误:
webSocket connection to 'ws://localhost:8080/websock/940/qdb1xkkp/websocket' failed: Error during WebSocket handshake: Unexpected response code: 404
答案 0 :(得分:0)
我的问题是我必须在通过stomp连接到套接字之前获得基本url:
var getUrl = window.location;
var baseUrl = getUrl .protocol + "//" + getUrl.host + "/" + getUrl.pathname.split('/')[1];
$stomp.connect(baseUrl + '/websock', {})