【问题标题】:How to broadcast messages in Spring Reactive Websocket API?如何在 Spring Reactive Websocket API 中广播消息?
【发布时间】:2019-07-24 13:25:59
【问题描述】:

我正在开发一个简单的聊天。我真的很喜欢基于 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的集合,可以用于消息广播。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-15
      • 1970-01-01
      • 1970-01-01
      • 2019-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-09
      相关资源
      最近更新 更多