Spring 4 STOMP Websockets Heartbeat
我似乎找不到如何在Spring中使用websockets向客户端发送心跳的好资源!
我有一个使用此配置运行的基本服务器:
@Configuration @EnableWebSocketMessageBroker public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker(MessageBrokerRegistry config) { config.enableSimpleBroker("/room"); config.setApplicationDestinationPrefixes("/app"); } @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/channels").withSockJS(); } }
然后我使用这样的东西向订阅房间的人发送消息:
this.simpMessagingTemplate.convertAndSend("/room/" + this.roomId, message);
这是用于与服务器通信的客户端代码:
this.connect = function (roomNameParam, connectionCallback) { var socket = new SockJS('http://localhost:8080/channels'), self.stompClient = Stomp.over(socket); self.stompClient.connect({}, function (frame) { self.stompClient.subscribe('/room/' + roomNameParam, connectionCallback); }); };
我真的想实现心跳,以便客户端知道谁连接并发送一些数据以保持客户端和服务器同步。
我需要手动完成吗?
Spring SockJS配置包含发送心跳的设置。 默认情况下,假设连接上没有发送其他消息,则每25秒发送一次心跳。 有关详细信息,请参阅Spring参考 。
只需致电:
.setTaskScheduler(heartBeatScheduler());
对于要启用它的代理配置(也适用于简单代理)。
@Configuration public class WebSocketMessageBrokerConfig extends AbstractWebSocketMessageBrokerConfigurer { @Override public void configureMessageBroker(MessageBrokerRegistry config) { config.setApplicationDestinationPrefixes("/app"); config.enableSimpleBroker("/topic", "/queue", "/user") .setTaskScheduler(heartBeatScheduler()); } @Override public void registerStompEndpoints(StompEndpointRegistry registry) { registry.addEndpoint("/endpoint"); } @Bean public TaskScheduler heartBeatScheduler() { return new ThreadPoolTaskScheduler(); } }
对于简单的代理,您可以像这样配置心跳: