在 Spring + Sockjs 应用程序上手动设置传输类型
Manually set transport type on a Spring + Sockjs application
我需要在不兼容 JEE7 的服务器上安装应用程序。我正在使用 Spring + Stomp + SocksJs 进行实时通知。
我的代码如下所示:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry ser) {
ser.addEndpoint("/notifications").withSockJS()
}
}
}
在客户端:
function setSocket(broker, callbackFn) {
var socket = {};
socket.cliente = new SockJS(path + broker);
socket.stomp = Stomp.over(socket.cliente);
socket.stomp.connect({}, function () {
socket.stomp.subscribe("/topic" + broker, callbackFn);
});
}
有没有办法手动设置要使用的传输类型并避免使用 websockets?
如果您的服务器不支持 websockets,请确保它仍然支持异步处理。
您可以使用以下选项在服务器端禁用 websocket 传输:
@Override
public void registerStompEndpoints(StompEndpointRegistry ser) {
ser.addEndpoint("/notifications").withSockJS().setWebSocketEnabled(false);
}
SockJS 客户端将自动 select 服务器支持的最佳可用传输。对于您的情况,这是处理此问题的首选方法。
如 SockJS client documentation 中所述,您可以在创建 SockJS 客户端时使用 transports
参数限制客户端的可用传输。
sockJsProtocols = ["xhr-streaming", "xhr-polling"];
socket.cliente = new SockJS(url, null, {transports: sockJsProtocols}));
满list of available transports is here。但从技术上讲,如果您不限制服务器端的可用传输,客户端仍然可以尝试使用 websockets 进行连接。
我需要在不兼容 JEE7 的服务器上安装应用程序。我正在使用 Spring + Stomp + SocksJs 进行实时通知。
我的代码如下所示:
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry ser) {
ser.addEndpoint("/notifications").withSockJS()
}
}
}
在客户端:
function setSocket(broker, callbackFn) {
var socket = {};
socket.cliente = new SockJS(path + broker);
socket.stomp = Stomp.over(socket.cliente);
socket.stomp.connect({}, function () {
socket.stomp.subscribe("/topic" + broker, callbackFn);
});
}
有没有办法手动设置要使用的传输类型并避免使用 websockets?
如果您的服务器不支持 websockets,请确保它仍然支持异步处理。
您可以使用以下选项在服务器端禁用 websocket 传输:
@Override
public void registerStompEndpoints(StompEndpointRegistry ser) {
ser.addEndpoint("/notifications").withSockJS().setWebSocketEnabled(false);
}
SockJS 客户端将自动 select 服务器支持的最佳可用传输。对于您的情况,这是处理此问题的首选方法。
如 SockJS client documentation 中所述,您可以在创建 SockJS 客户端时使用 transports
参数限制客户端的可用传输。
sockJsProtocols = ["xhr-streaming", "xhr-polling"];
socket.cliente = new SockJS(url, null, {transports: sockJsProtocols}));
满list of available transports is here。但从技术上讲,如果您不限制服务器端的可用传输,客户端仍然可以尝试使用 websockets 进行连接。