我使用SignalR将客户端连接到我们的服务器(与socketio websockets相同),因此我可以向系统发送活动通知。它不是聊天应用程序。因此,发送时的消息仅适用于特定用户。
这些客户端连接在多个Web服务器上,这些服务器订阅了redis背板。就像本文中提到的那样 - http://www.asp.net/signalr/overview/performance/scaleout-in-signalr
我的问题是这种通知系统,在redis pubsub中 - 我应该有多个频道 - 背板中每个用户一个,并且应用服务器监听每个用户通知频道。或者为所有这些通知设置一个通道,应用服务器会解析每条消息并确定是否已连接该用户标识并将消息发送给该用户。
答案 0 :(得分:0)
基于我对应用程序详细信息的了解,我认为您应该在每个客户端的背板/ Redis中创建通道/列表。这在Redis中很便宜,并且它使服务器端进程处理特定客户端仅它们应该具有的通知。
这应该可以保存您的应用程序迭代或处理无关数据,这可能会影响大规模的性能,如果安全性是一个问题(不知道域或应用程序是什么),那么它将是最好的从不检索/接收不适合特定客户的信息。
我将提出一个最后的问题和一些我认为支持我的观点的想法。如果您不是逐个客户端执行此操作,那么当用户不在场时接收消息时您将如何处理?您可能必须抛弃该消息,或让应用程序服务器在每次轮询或以其他方式从Redis接收信息时处理每个客户端的未接收消息。这真的可以加起来。虽然在不知道申请细节的情况下,我不确定这一段是否相关。
在一天结束时,虽然方法和意见可能会因应用程序而异,但我会考虑实体方面的架构,并概述。您有客户端,他们直接发送和接收消息。这些消息应该以某种方式与所涉及的每一方相关联,并且它们应该以有效查找的方式存储,并且有助于定义/概述应用程序的结构。
希望我的2c有帮助!