asp.net - 具有 redis 背板横向扩展的 Web 套接字 - 每个用户多个 redis channel 或所有用户一个 redis channel

标签 asp.net node.js sockets redis signalr

我正在使用 SignalR(与 socketio websockets 相同)将客户端连接到我们的服务器,这样我就可以向他们发送系统事件的通知。它不是聊天应用程序。因此,发送的消息将仅针对特定用户。

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

enter image description here

我的问题是关于这种通知系统,在 redis pubsub 中——我应该有多个 channel ——背板中每个用户一个,应用服务器监听每个用户的通知 channel 。或者为所有这些通知设置一个 channel ,然后应用服务器解析每条消息并确定它们是否连接了该用户 ID 并将消息发送给该用户。

最佳答案

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

这应该可以节省您的应用程序迭代或不相关数据的处理,这可能会对大规模性能产生影响,如果安全是一个问题(不知道域或应用程序是什么),那么最好绝不会不必要地检索/接收并非为特定客户准备的信息。

我将提出最后一个问题和一些我认为支持我观点的想法。如果您不逐个客户端执行此操作,那么当用户不在场接收消息时您将如何处理?您要么必须丢弃该消息,要么让应用程序服务器在每次轮询或以其他方式从 Redis 接收信息时为每个客户端处理未收到的消息。这真的可以加起来。虽然,在不知道申请细节的情况下,我不确定这一段是否相关。

归根结底,尽管方法和意见可能因应用程序而异,但我会根据实体和您概述的方式来考虑架构。您有客户,他们直接相互发送和接收消息。这些消息应该以某种方式与涉及的每一方相关联,并且它们应该以一种便于查找的方式存储,并有助于定义/概述应用程序的结构。

希望我的 2c 有所帮助!

关于asp.net - 具有 redis 背板横向扩展的 Web 套接字 - 每个用户多个 redis channel 或所有用户一个 redis channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38751380/

相关文章:

node.js - 我在 Electron 中使用require时的问题

c - 使用套接字的 IPC 中的意外输出

c# - Azure网站不断抛出错误 "An attempt was made to access a socket in a way forbidden by its access permissions"

python - 在Python中使用ZMQ在客户端/服务器配置中进行嗅探器/监视

javascript - 如何在 asp.net mvc 中重置 session 超时

asp.net - session 状态服务器冗余

asp.net - Facebook 图形 API 超时

asp.net - 使用 __DoPostBack 通过方法名称调用服务器端方法

Node.js:连接身份验证 VS。每次验证

node.js - 在 Node js 项目和网站项目之间共享代码