【发布时间】:2015-10-13 12:45:46
【问题描述】:
我试图创建一个基于 websocket 的应用程序,其中服务器需要使用心跳与客户端保持连接。
我检查了服务器ServerWebSocketContainer.SockJsServiceOptions 类是否相同,但无法使用它。我正在使用 spring-integration 示例中的代码
@Bean
ServerWebSocketContainer serverWebSocketContainer() {
return new ServerWebSocketContainer("/messages").withSockJs();
}
@Bean
MessageHandler webSocketOutboundAdapter() {
return new WebSocketOutboundMessageHandler(serverWebSocketContainer());
}
@Bean(name = "webSocketFlow.input")
MessageChannel requestChannel() {
return new DirectChannel();
}
@Bean
IntegrationFlow webSocketFlow() {
return f -> {
Function<Message , Object> splitter = m -> serverWebSocketContainer()
.getSessions()
.keySet()
.stream()
.map(s -> MessageBuilder.fromMessage(m)
.setHeader(SimpMessageHeaderAccessor.SESSION_ID_HEADER, s)
.build())
.collect(Collectors.toList());
f.split( Message.class, splitter)
.channel(c -> c.executor(Executors.newCachedThreadPool()))
.handle(webSocketOutboundAdapter());
};
}
@RequestMapping("/hi/{name}")
public void send(@PathVariable String name) {
requestChannel().send(MessageBuilder.withPayload(name).build());
}
请告诉我如何设置心跳选项以确保连接保持活动状态,除非客户端自行注销。
谢谢
【问题讨论】:
标签: spring-boot spring-integration spring-websocket