WebSockets in Spring là một chủ đề khá mới mà tôi rất mệt mỏi khi tìm kiếm thêm một chút.Spring WebSocket Kết nối với SockJS đến một miền khác
Vấn đề của tôi là kết nối với một dịch vụ từ một miền khác, tôi đang làm việc với Lineman xây dựng mặt trước và Spring Boot khi thực hiện back-end, với các ứng dụng này cổng: 8000 và 8080 trên máy chủ cục bộ.
Tôi gặp sự cố với tiêu đề 'Access-Control-Allow-Origin' nhưng tôi đã giải quyết vấn đề bằng cách thêm bộ lọc ở phía máy chủ đã thêm nguồn gốc được phép vào tiêu đề. Sau đó tôi bắt đầu nhận được lỗi sau trên kết nối:
GET http://localhost:8080/socket/info 403 (Forbidden)
AbstractXHRObject._start @ sockjs-0.3.4.js:807
(anonymous function) @sockjs-0.3.4.js:841
tôi không có mùa xuân an ninh trong dự án vì vậy đây không phải là một vấn đề ủy quyền, các điểm lỗi để sockJS: that.xhr.send (khối hàng); - nơi tải trọng không bao giờ được xác định. Tôi đã thử nhưng không thể tìm thấy thư mục gốc của cuộc gọi nơi có thể bắt đầu. Tôi đã suy nghĩ nếu tôi cần thêm một số thông tin bổ sung cho SockJS và Stomp khi thiết lập kết nối, nhưng không có nhiều ví dụ và ghi chú trong cả hai trang wiki của công cụ này.
Dưới đây bạn sẽ tìm thấy mã JS kết nối.
var socket = new SockJS("http://localhost:8080/socket");
client = Stomp.over(socket);
client.connect({'login': BoatsGame.userName,
'passcode': 'guest'},
function (frame) {
....
The Server Side has a MessageBroker configured :
@Configuration
@EnableWebSocketMessageBroker
public class MessageBrokerConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Bean
public ServletServerContainerFactoryBean createWebSocketContainer() {
ServletServerContainerFactoryBean container = new ServletServerContainerFactoryBean();
container.setMaxTextMessageBufferSize(8192);
container.setMaxBinaryMessageBufferSize(8192);
return container;
}
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
//config.enableStompBrokerRelay("/queue", "/topic");
config.enableSimpleBroker("/queue", "/topic","/user");
config.setApplicationDestinationPrefixes("/BoatBattleGame");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) {
stompEndpointRegistry.addEndpoint("/socket").withSockJS();
}
}
Tôi cũng đã cố gắng thiết lập MessageHandler vì nó có tùy chọn đặt OriginAllowe khi định cấu hình, nhưng tôi không chắc chắn cách thức kết nối với nhà môi giới.
Cuối cùng, thiết lập này hoạt động chính xác khi chạy trên một cổng.
Bạn đã bao giờ có được điều này đang làm việc? Tôi gặp vấn đề tương tự. – jax
Tôi đã làm việc này trong một ứng dụng mùa xuân bằng cách thiết lập nguồn gốc được cho phép. 'registry.addEndpoint ('/ websocket/models'). setAllowedOrigins (" * "). withSockJS();' – jax
Cảm ơn bạn rất nhiều. Các bạn đã làm cho ngày của tôi. – havish