Moh*_*han 7 java spring stomp websocket sockjs
我的 websocket 客户端是在 STOMP Java 客户端(Spring 项目)中开发的,服务器是在 Spring boot 中实现的。
当客户端/服务器握手发生时,我遇到连接升级问题。
Java客户端代码
List<Transport> transports = new ArrayList<>(1);
transports.add(new WebSocketTransport(new StandardWebSocketClient()));
SockJsClient sockjsClient = new SockJsClient(transports);
WebSocketStompClient stompClient = new WebSocketStompClient(sockjsClient);
stompClient.setMessageConverter(new MappingJackson2MessageConverter());
stompClient.setTaskScheduler(new ConcurrentTaskScheduler());
StompSessionHandler sessionHandler = new SessionHandler();
stompClient.connect("ws://localhost:9090/health", sessionHandler);
Run Code Online (Sandbox Code Playgroud)
服务器端
@Override
public void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) {
stompEndpointRegistry.addEndpoint("/health")
.setAllowedOrigins("*")
.withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/topic");
registry.setApplicationDestinationPrefixes("/app");
}
Run Code Online (Sandbox Code Playgroud)
连接到服务器时客户端产生异常
16:18:50.955/3771 [SimpleAsyncTaskExecutor-1]错误oswsscDefaultTransportRequest - TransportRequest之后不再有后备传输[url=ws://localhost:9090/health/29/344d627baac949f5bab5506f05f1a7eb/websocket] javax.websocket.DeploymentException:来自服务器 [200] 的 HTTP 响应不允许 HTTP 升级到 WebSocket 在org.apache.tomcat.websocket.WsWebSocketContainer.connectToServerRecursive(WsWebSocketContainer.java:434) 在org.apache.tomcat.websocket.WsWebSocketContainer.connectToServerRecursive(WsWebSocketContainer.java:392) 在 org.apache.tomcat.websocket.WsWebSocketContainer.connectToServer(WsWebSocketContainer.java:194) 在 org.springframework.web.socket.client.standard.StandardWebSocketClient.lambda$doHandshakeInternal$0(StandardWebSocketClient.java:150) 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) 在 java.lang.Thread.run(Thread.java:745)
在 tomcat localhost_access_log 中我看到以下请求信息
127.0.0.1 - - [01/11/2018:22:09:41 +0530]“获取/健康/信息 HTTP/1.1”302 - 0 127.0.0.1 - - [01/11/2018:22:09:41 +0530]“GET /login.jsp HTTP/1.1”200 7649 16 127.0.0.1 - - [01/11/2018:22:09:41 +0530]“GET /health/191/6828a1fdefee40cf8dc74e825d8d2b0c/websocket HTTP/1.1”302 - 0 127.0.0.1 - - [01/11/2018:22:09:41 +0530]“GET /login.jsp HTTP/1.1”200 7649 0
我没有找到任何有关如何解决此问题及其原因的信息。
请帮我解决这个问题。
nur*_*gin 10
为时已晚,无法为您的问题提供有用的解决方案。今天我面临着你已经经历过的同样的问题。不幸的是,Spring Framework 示例和官方资源并未完全引用。因此,我想写一下我是如何构建和运行它的。首先,原答案不属于我。我在https://code5.cn/so/java/783097找到的。
据我所知,为了能够从 HTTP 升级 WebSocket 协议,我们应该用所需的功能稍微扩展“WebSocketConfiguration”部分。
RequestUpgradeStrategy upgradeStrategy = new TomcatRequestUpgradeStrategy();
registry.addEndpoint("/hello")
.withSockJS();
registry.addEndpoint("/hello")
.setHandshakeHandler(new DefaultHandshakeHandler(upgradeStrategy))
.setAllowedOrigins("*");
Run Code Online (Sandbox Code Playgroud)
完成以上调整后,您就可以通过嗅探WireShark来了解协议之间的切换了。
我希望这对正在寻找消除错误方法的人有所帮助。
归档时间: |
|
查看次数: |
14743 次 |
最近记录: |