我似乎找不到一个很好的资源,在如何发送心跳到客户端使用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);
});
};我真的想实现心跳,这样客户端就知道谁是连接的,并发送一些数据来保持客户机和服务器的同步。
我需要手动做吗?
发布于 2015-03-06 21:51:18
Spring SockJS配置包含发送心跳的设置。默认情况下,假设没有在连接上发送其他消息,则每25秒发送一次心跳。详情请参见弹簧参考。
发布于 2018-03-02 12:44:45
只需打电话:
.setTaskScheduler(heartBeatScheduler());对于要启用它的broker配置(也适用于)。
@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();
}
}发布于 2017-10-06 21:19:54
对于简单代理,您可以像这样配置心跳:
<websocket:message-broker application-destination-prefix="/app">
<websocket:stomp-endpoint path="/wshandler" allowed-origins="*">
</websocket:stomp-endpoint>
<websocket:simple-broker prefix="/topic, /queue" heartbeat="10000,10000" scheduler="pingScheduler"/>
</websocket:message-broker>
<bean id="pingScheduler" class="org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler">
<property name="poolSize" value="1"/>
<property name="threadNamePrefix" value="wss-heartbeat-thread-"/>
</bean>https://stackoverflow.com/questions/28841505
复制相似问题