如何在Spring Reactive Websocket API中广播消息?

时间:2019-03-02 20:45:03

标签: java spring reactive-programming spring-webflux spring-websocket

我正在建立一个简单的聊天室。我真的很喜欢基于Tomcat的spring websocket API,但是有一个问题。 Tomcat使用基于线程的模型。如果我有大约500个在线用户,tomcat将启动200个线程(默认值),并且CPU死亡。因此,我需要一个基于事件循环的websocket实现。我决定尝试通过websockets来使用全新的spring反应式API。

所以,我需要和聊天室聊天。当某些用户在聊天室中发送消息时,必须将其发送给聊天室中的所有用户。

Spring提供以下API:

@Service
public class ChatWebSocketHandler implements WebSocketHandler {

    @Override
    public Mono<Void> handle(WebSocketSession session) {
        Mono<Void> input =  ;
        Mono<Void> output = ;

        return Mono.zip(input, output).then();
    }
}

没有用于检测connecteddisconnected事件的API(例如Tomcat)。因此,我无法存储active sessions的集合,该集合可用于消息广播。

1 个答案:

答案 0 :(得分:1)

有一篇很好的文章介绍了如何结合使用webflux和websockets how-to-build-a-chat-app-using-webflux-websockets-react来实现全局聊天应用程序。 您应该可以通过他的代码掌握API并对其进行修改,以支持多个聊天室的需求。

他还描述了如何侦听连接和断开“事件”。 您可以在github上找到相应的项目:java-reactive-chat