服务器广播实现中的SignalR scaleout / backplane - 它是否会导致客户端重复消息?

时间:2015-04-04 11:52:31

标签: signalr signalr-hub signalr-backplane

SignalR文档说,在服务器广播类型的加载/实现的情况下,扩展/背板运行良好。但是,我怀疑在纯服务器广播的情况下,它会导致重复的消息被发送到客户端。请考虑以下情形:

  1. 我的中心有两个实例,位于我的Web场上负载均衡器后面的两个Web服务器上。
  2. 每个服务器上的集线器实现一个用于数据库轮询的计时器,以获取一些更新并以组的形式向客户端广播,并按主题ID分组。
  3. 组/主题的客户端可能在两个服务器之间分配。
  4. 两个集线器实例都将从数据库中获取相同或重叠的更新。
  5. 现在,每个集线器通过背板向客户端发送更新,是否会导致重复更新发送给客户端?
  6. 请建议。

1 个答案:

答案 0 :(得分:0)

问题不在于SignalR,而是您的数据库轮询存在于您的集线器中。背板正确处理广播复制,但如果您向集线器添加其他责任,那么它就是一个不同的故事。这是复制消息的部分,而不是SignalR,因为现在你有N个轮询器在所有服务器实例上进行广播。

例如,您可以将该逻辑从集线器中移除到其他内容,并让服务器应用程序的单个实例使用这个新部分,以便通过轮询来生成消息,使用可能的一部分配置决定哪一个。这样您只能从那里发送消息,SignalR的背板将负责复制。它只是一个非常基本的建议,可以采用不同的方式,但关键是你的轮询器不应该复制,并且与SignalR没有直接关系。

同样正确的是,民意调查可能不是处理您的情景的最佳方式,但IMO会回答不同的问题。