wal*_*alv 2 java spring stomp spring-websocket
我正在使用 Spring 4 + Websockets + Stomp JS 库。我找不到任何方法来设置 websocket ping/pong 机制(心跳)。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<beans xmlns="http://www.springframework.org/schema/beans" ...">
<websocket:message-broker>
<websocket:stomp-endpoint path="/cors/auth/clientEndpoint">
<websocket:handshake-handler ref="myHandshakeHandler" />
</websocket:stomp-endpoint>
<websocket:simple-broker prefix="/queue, /topic" />
<websocket:client-inbound-channel>
<websocket:interceptors>
<bean class="com.mycompany.myproject.utils.messaging.MyInboundChannelInterception"></bean>
</websocket:interceptors>
</websocket:client-inbound-channel>
</websocket:message-broker>
<bean id="myHandshakeHandler" class="com.mycompany.myproject.utils.security.MyHandshakeHandler" />
<bean class="org.springframework.web.socket.server.standard.ServletServerContainerFactoryBean">
<property name="maxSessionIdleTimeout" value="120000" />
</bean>
Run Code Online (Sandbox Code Playgroud)
因此,我正在实现我自己的 ping/pong 消息机制。
这里的任务之一 - 实现 websocket 的服务器端关闭,以防客户端在超过 10 秒内没有 ping 消息。
并且无法使用 Spring Websockets 来做到这一点!
也许有人可以告诉我如何访问用户的 Session 对象或通过 Spring Websockets 关闭这些 Session?
看来这里的春天很有限。
我很惊讶 spring 文档没有提到如何配置服务器 ping...看来 spring 希望我们阅读代码而不是阅读文档..
在网上搜索并阅读源代码一段时间后,我意识到它已经被支持,但没有记录在像 spring websocket 文档这样的显着位置。
我使用的是 spring 4.3.3,以下是如何在不使用 sockJS 的情况下配置服务器 ping:
@Configuration
@EnableWebSocketMessageBroker
public class StompOverWebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/ws").setAllowedOrigins("*");
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.setApplicationDestinationPrefixes("/app");
ThreadPoolTaskScheduler pingScheduler = new ThreadPoolTaskScheduler();
pingScheduler.initialize();
registry.enableSimpleBroker("/topic")
.setHeartbeatValue(new long[]{20000, 0}).setTaskScheduler(pingScheduler);
}
....
}
Run Code Online (Sandbox Code Playgroud)
并且应该确保正确设置 Web 套接字会话超时,它应该大于 ping 间隔,如下所示:
<bean id="servletServerContainerFactoryBean" class="org.springframework.web.socket.server.standard.ServletServerContainerFactoryBean">
<property name="maxSessionIdleTimeout" value="30000"/>
</bean>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13494 次 |
| 最近记录: |