我正在设计一个基于Java Spring的实时通知系统&使用Redis的聊天系统& WebSockets(带有sockJS和STOMP)。要求是为每个用户订阅一个唯一的频道(频道名称将是用户ID)。这是因为通知可以针对单个用户,聊天对话可以是1对1。使用redis的im的原因是为了获得用户通过WebSocket连接的相应应用程序服务器(有很多)触发的事件。据我了解,当发生公布说“USER1” - 如果我想要得到的“的onMessage处理程序”解雇只是目标用户:Redis - 最大订阅数/连接数?
- 我需要保持每用户1个Redis的连接?
- 可以一次打开15k个连接,并且可以同时连接到系统的许多用户使用15k独特订阅吗?
系统如何知道用户连接哪个应用程序服务器知道用户有新消息或者您正在询问什么? – goblinjuice
系统知道,因为Redis将在用户连接到的相应应用程序服务器中触发事件处理程序。假设用户-a连接到appserver-a,用户-b连接到appserver-b。当我向两个用户订阅的频道发布消息时,redis将在两个应用服务器中触发事件,并且在事件处理程序中,我有代码通过用户连接的websocket将消息发送给用户。 – user1220169
我的问题是这样的。在用户-a订阅channel-a和user-b到channel-b并且他们两个都连接到同一个应用服务器的情况下 - 我需要为每个用户分配两个到redis的连接。因此,当我向user-a发布消息时,事件仅在连接时触发 - a用户a的eventHanler正在侦听,而user-b由于他/她通过完全独立的连接进行连接,因此未收到此消息。我需要知道这是否是一个好方法。 – user1220169