0

我正在使用 Redis 和 WebSockets(使用 sockJS 和 STOMP)设计一个基于 Java Spring 的实时通知系统和聊天系统。要求每个用户订阅一个唯一的频道(频道名称将是用户 ID)。这是因为通知可以针对单个用户,并且聊天对话可以是一对一的。我使用redis的真正原因是在用户通过WebSocket连接的相应应用程序服务器(有很多)中触发事件。据我了解,当发布碰巧说“user1”时 - 如果我想为该目标用户触发“onMessage 处理程序”:

  1. 我需要为每个用户维护 1 个 redis 连接吗?
  2. 是否可以一次打开 15k 个连接,同时为那些同时连接到系统的许多用户提供 15k 个唯一订阅?
4

1 回答 1

0

既然你已经用 Redisson 标记了这个问题,我想你已经在使用它了。如果你选择的 WebSocket 框架是灵活的,即不限于 SockJS 和 STOMP,你可以考虑netty-socketio项目。它是由Redisson的作者编写的,两者之间的融合再自然不过了。

Netty-socketio 与流行的SocketIO客户端 JS 库完全兼容,并被许多商业公司使用。

它不需要每个用户一个 redis 连接,而且已知有些人的使用量已经超过了您的要求。

这在项目的 README 文件中有所提及。

2014年客户反馈:

“为了对解决方案进行压力测试,我们同时运行了 30,000 个 websocket 客户端,并设法以每秒约 140,000 条消息的速度达到峰值,平均延迟不到 1 秒。” (c) Viktor Endersz - Kambi Sports Solutions

于 2017-08-17T09:49:42.513 回答