2016-08-03 44 views
0

我使用SignalR(与socketio websockets相同)将客户端连接到我们的服务器,以便我们可以向系统发送活动通知。它不是一个聊天应用程序。因此,发送时的消息只适用于特定的用户。带有redis背板扩展的Web套接字 - 每个用户有多个redis通道或所有用户有一个redis通道

这些客户端连接到多个Web服务器,并且这些服务器订阅了Redis底板。喜欢这篇文章中提到 - http://www.asp.net/signalr/overview/performance/scaleout-in-signalr

enter image description here

这里我的问题是这样的通知系统,在Redis的发布 - 订阅 - 我应该有多种渠道 - 在背板每个用户一个和应用程序服务器侦听到每个用户通知频道。或者有一个通道用于所有这些通知,并且应用服务器解析每条消息并确定它们是否已连接并将消息发送给该用户。

回答

0

基于我对应用程序的细节知之甚少,我认为您应该在每个客户端的基础上在背板/ Redis中创建频道/列表。这在Redis中会很便宜,并且它给服务器端进程处理特定的客户端只有他们应该有的通知。

这应该会节省您的应用程序迭代或处理不相关的数据,这可能会影响性能,并且如果安全性完全担心(不知道域或应用程序是什么),那么它会是最好永远不要检索/接收不必要的信息,而不是针对特定客户。

我会提出一个最后的问题和一些我认为支持我的观点的想法。如果你不以逐客户为基础来做这件事,那么当用户不在的时候你将如何处理以接收消息?每次他们轮询或以其他方式从Redis接收信息时,您都必须丢弃该消息,或让应用程序服务器为每个客户端处理未收到的消息。这可能真的加起来。尽管在不知道应用程序的细节的情况下,我不确定这段文字是否相关。

在一天结束时,虽然方法和意见可能因应用程序而异,但我会考虑实体的架构和您所概述的内容。你有客户,他们直接发送和接收消息。这些消息应该以某种方式与所涉及的每一方相关联,并且应该以对查找有效的方式存储它们,并且这有助于定义/概述应用程序的结构。

希望我的2c帮助!

相关问题