我正在使用 Redis 和 WebSockets(带有 sockJS 和 STOMP)设计一个基于 Java Spring 的实时通知系统和聊天系统。要求是每个用户订阅一个唯一的 channel ( channel 名称将是用户 ID)。这是因为通知可以针对单个用户,聊天对话可以是一对一的。我使用 redis 的真正原因是在用户通过 WebSocket 连接的相应应用程序服务器(有很多)中触发事件。据我了解,当发布碰巧说“user1”时 - 如果我想为该目标用户触发“onMessage 处理程序”:
- 我需要为每个用户维护 1 个 redis 连接吗?
- 对于那些同时连接到系统的许多用户,一次打开 15k 个连接和 15k 个唯一订阅是否可以?
最佳答案
既然你已经用 Redisson 标记了问题,我想你已经在使用它了。如果您对 WebSocket 框架的选择是灵活的,即不限于使用 STOMP 的 SockJS,您可以考虑 netty-socketio项目。它是由 Redisson 的作者编写的,两者之间的结合再自然不过了。
Netty-socketio 完全兼容流行的 SocketIO客户端 JS 库,许多公司在商业上使用它。
它不需要每个用户一个 redis 连接,并且已知有人的使用量已经超过了您的要求。
项目的 README 文件中提到了这一点。
Customer feedback in 2014:
"To stress test the solution we run 30 000 simultaneous websocket clients and managed to peak at total of about 140 000 messages per second with less than 1 second average delay." (c) Viktor Endersz - Kambi Sports Solutions
关于Redis - 最大订阅/连接数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45532870/