Spring 中的 WebSockets 是一个相当新的主题,我厌倦了寻找更多内容。
我的问题是连接到来自不同域的服务,我正在与 Lineman 一起构建前端,并与 Spring Boot 一起构建后端,我在两个不同的端口上有这些应用程序:8000 和本地主机上的 8080。
我遇到了“Access-Control-Allow-Origin”标头的问题,但我已经通过在服务器端添加一个过滤器来解决它,该过滤器将允许的来源添加到标头中。之后我开始在连接时出现以下错误:
GET http://localhost:8080/socket/info 403 (Forbidden)
AbstractXHRObject._start @ sockjs-0.3.4.js:807
(anonymous function) @sockjs-0.3.4.js:841
我的项目中没有 Spring Security,所以这不是授权问题,错误指向 sockJS :
that.xhr.send(有效负载); - 从未定义有效负载。我尝试过,但找不到可能开始的调用的根源。
我在想在设置连接时是否需要向 SockJS 和 Stomp 添加一些附加信息,但该工具的两个 wiki 页面中都没有太多示例和注释。
下面你将找到连接 JS 代码。
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();
}
}
我还尝试设置 MessageHandler,因为它可以在配置时设置 OriginAllowe 选项,但我不确定它如何连接到代理。
最后想一想,此设置在一个端口上运行时可以正常工作。