SignalR服务器更新与客户对更新子集的兴趣

时间:2014-05-06 17:52:16

标签: signalr signalr-hub signalr.client

在我见过的很多例子中,例如StockTicker应用程序,假设所有客户都对所有股票价格的更新感兴趣......

我正在尝试确定客户端何时只关心更新子集的最佳实践......

我会:

  1. 向所有客户端广播所有更新,并让客户确定 “如果他们关心”客户端方法?
  2. 向每个客户端连接注册“的项目 兴趣“并在某处维护客户连接表, 迭代地向所有已表达过的客户广播 利益?
  3. 为每个股票(例如)创建一个SignalR组 将客户注册到“感兴趣的”特定股票组和 在相关更新期间仅向特定组广播 股票?
  4. 我想念的其他东西......
  5. 为了使这个问题不那么主观,上述每个场景的缺陷是什么(而不是“你更喜欢哪个?”)?

    感谢帮派。

1 个答案:

答案 0 :(得分:2)

"我会:"

  1. "向所有客户广播所有更新,并让客户确定"他们是否关心"在客户端方法?"

    这个解决方案可能是最简单的实施和推理。不幸的是,此解决方案还创建了最多的网络流量。在某些情况下,它们也可能被认为是不安全的,其中发送的消息是敏感的,应该对某些客户端隐藏。

  2. "在每个客户端连接中注册"感兴趣的项目"并在某处维护一个客户连接表,迭代地向所有表达了这种兴趣的客户进行广播?"

    这似乎与SignalR组在概念上非常相似,但迭代地向个人客户端广播通常不如向组广播那样有效。这主要是因为SignalR只需要在每个组广播中向其总线发布一条消息。

    但是,您可能希望维护一个"客户端连接表"包含"感兴趣的项目"即使您最终使用内置的SignalR组功能,也为每个客户端提供服务。 SignalR只允许您在群组中添加/删除客户端并向群组广播,因此如果您想要找出群组中的当前用户,您将不得不自己跟踪。

    如果您维护自己的桌子,可以避免发送您不知道客户当前感兴趣的消息。您也可以在他们离开并返回时自动将客户重新订阅他们感兴趣的项目。

  3. "为每个股票创建一个SignalR组(例如),并将客户注册到每个特定股票组"感兴趣的#34;在更新相关股票期间,仅向特定群组广播?"

    这将是我的选择。小组自然地与感兴趣的项目对齐"。鉴于您的情况,我没有看到太多的缺点,特别是如果您还维护自己的客户端连接表"同样。

  4. "我失踪的其他东西......"

    我认为你涵盖了三个基本选项。