我在客户端上使用Spring Websocket和SockJs(v1.1.1)而不是STOMP。我使用下面的代码创建客户端。
SockJS = require('sockjs-client')
Stomp = require('webstomp-client')
stompClient = Stomp.over(new SockJS(url))
它的工作正常。但它默认使用xhr_streaming
作为传输,这对我来说是不可取的。我想将其切换为websocket
tranport。
stompClient = Stomp.over(new SockJS(url, null, {transports:'websocket'}))
但这种方法对我不起作用。它与事件有关:
code: 2000
reason: "All transports failed"
My Spring Websocket配置非常简单:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractSessionWebSocketMessageBrokerConfigurer<ExpiringSession> {
@Override
public void configureStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/myEndpoint").setAllowedOrigins("*")
.withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/queue/", "/topic/");
registry.setApplicationDestinationPrefixes("/app");
}
}
我面对xhr_streaming
的主要问题是每个流请求都会更新用户会话的上次访问时间(我也使用Spring Session)。但它对我的应用程序来说并不是一个理想的行为。那么我该如何解决呢?并且websocket
会有运输帮助吗?提前谢谢。
答案 0 :(得分:2)
所以,我有理由。我正在使用带有proxy
选项的webpack dev服务器。默认情况下,它不代理ws
协议请求(它丢失了标头)。您需要在配置中添加ws: true
,一切都会正常运行。
proxy: {
'/api/*': {
target: 'http://localhost:8080',
pathRewrite: {'^/api' : ''},
ws: true
}
}