Tôi đang chơi đùa với các mới (như các phiên bản 4.2) java STOMP hỗ trợ khách hàng. Điểm xuất phát của tôi là hướng dẫn bắt đầu (Using WebSocket to build an interactive web application).WebSocketStompClient sẽ không kết nối với thiết bị đầu cuối SockJS
Tiêu chí sau đây được cung cấp trong ví dụ:
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/hello").withSockJS();
}
tôi thành công có thể kết nối bằng cách sử dụng client trình duyệt. Khi cố gắng để kết nối với thiết bị đầu cuối này bằng cách sử dụng client java stomp sử dụng như sau:
WebSocketClient transport = new StandardWebSocketClient();
WebSocketStompClient stompClient = new WebSocketStompClient(transport);
stompClient.setMessageConverter(new StringMessageConverter());
String url = "ws://127.0.0.1:8080/hello";
ListenableFuture<StompSession> future = stompClient.connect(url,myHandler);
tôi gặp phải trường hợp ngoại lệ sau đây:
08:56:30.629 [SimpleAsyncTaskExecutor-1] DEBUG o.s.m.simp.stomp.DefaultStompSession - Failed to connect session id=4e6737da-8f68-691d-375f-9e46f48bc149 javax.websocket.DeploymentException: The HTTP response from the server [HTTP/1.1 200 OK ] did not permit the HTTP upgrade to WebSocket at org.apache.tomcat.websocket.WsWebSocketContainer.parseStatus(WsWebSocketContainer.java:637) ~[tomcat-embed-websocket-8.0.20.jar:8.0.20] at org.apache.tomcat.websocket.WsWebSocketContainer.processResponse(WsWebSocketContainer.java:621) ~[tomcat-embed-websocket-8.0.20.jar:8.0.20] at org.apache.tomcat.websocket.WsWebSocketContainer.connectToServer(WsWebSocketContainer.java:309) ~[tomcat-embed-websocket-8.0.20.jar:8.0.20] at org.springframework.web.socket.client.standard.StandardWebSocketClient$1.call(StandardWebSocketClient.java:152) ~[spring-websocket-4.2.0.BUILD-SNAPSHOT.jar:4.2.0.BUILD-SNAPSHOT] at org.springframework.web.socket.client.standard.StandardWebSocketClient$1.call(StandardWebSocketClient.java:149) ~[spring-websocket-4.2.0.BUILD-SNAPSHOT.jar:4.2.0.BUILD-SNAPSHOT] at java.util.concurrent.FutureTask.run(Unknown Source) [na:1.8.0] at java.lang.Thread.run(Unknown Source) [na:1.8.0]
Sau khi điều tra thêm tôi đã thay đổi cấu hình máy chủ đầu cuối dựa trên TomcatWebSocketTestServer.java được sử dụng trong StompWebSocketIntegrationTests.java như sau:
RequestUpgradeStrategy upgradeStrategy = new TomcatRequestUpgradeStrategy();
registry.addEndpoint("/hello")
.setHandshakeHandler(new DefaultHandshakeHandler(upgradeStrategy))
.setAllowedOrigins("*");
Bây giờ tôi có thể kết nối, nhưng khách hàng trình duyệt không thể.
GET http://localhost:8080/hello/info 404 (Not Found)
Nếu tôi thêm .withSockJs() để cấu hình thiết bị đầu cuối:
RequestUpgradeStrategy upgradeStrategy = new TomcatRequestUpgradeStrategy();
registry.addEndpoint("/hello")
.setHandshakeHandler(new DefaultHandshakeHandler(upgradeStrategy))
.setAllowedOrigins("*")
.withSockJs();
trình duyệt trên client có thể kết nối một lần nữa, nhưng khách hàng java là trở lại các lỗi ban đầu.
Tôi có thể chia sẻ cùng một điểm cuối giữa cả hai khách hàng hoặc tôi có cần phải định cấu hình hai điểm cuối riêng biệt trong trường hợp này không?
Cảm ơn, câu trả lời của bạn là hữu ích. Tôi đã cập nhật câu trả lời của mình với cấu hình mới dựa trên phản hồi của bạn. Xin lỗi tôi chưa thể upvote (không đủ điểm danh tiếng). – stacktrace