【问题标题】:SignalR search and unsubscribeSignalR 搜索和退订
【发布时间】:2015-11-02 17:37:00
【问题描述】:

我想澄清有关 SignalR 的几点。我有一个读取交易的应用程序(例如,具有相关股票价格流的股票代码)。此 SignalR 集线器的组以股票代码为基础。它有一个发布者,该发布者在 SignalR 集线器的启动(以读取流数据)时启动,然后客户端订阅某些股票代码。此类集线器的工作流程有据可查。

我有第二个集线器,用于搜索从表中读取的不相关(与上述)数据。此集线器的集线器发布者未在集线器启动时启动。我让发布者在订阅发生时开始。订阅接收搜索条件,创建一个组(其名称基本上是搜索条件)。这种类型的集线器对我来说并不太清楚。具体来说,当我输入不同的搜索条件时,我应该在何时何地取消订阅。目前我订阅然后根据搜索收到一条消息。当我输入不同的搜索条件时,我应该在哪里取消订阅 - (a) 来自客户端,或者 (b) 我应该简单地将旧条件与“下一个”搜索条件一起传递并在服务器上调用 unsubscibe(即取消订阅一个并订阅到另一个),或者(c)我需要明确取消订阅吗?

任何帮助将不胜感激

【问题讨论】:

  • 我不清楚的是,当您订阅搜索词时,您是否希望您的客户在不同时间收到多个答案,基于相同条件下可用的新结果?我假设是这样,但从你的问题我不确定,因为那为什么需要不同的搜索条件来清除前一个?他们在我看来是不相关的搜索。
  • 我正在尝试做的是 UserA 订阅一个集线器(传递一个值 123),该集线器创建了一个名为 ACCOUNT123 的组(123 是他/她正在搜索的帐号)。 UserB 订阅了同一个集线器(传递值 456),该集线器创建了一个组 ACCOUNT456(456 是他/她正在搜索的帐号)。当搜索针对每个条件返回的内容有更新时,结果应仅传递回相关用户(即,如果帐号 123 的帐户名称发生更改,则更新将仅发送给 UserA,因为他/她已订阅到 ACCOUNT123 组)

标签: c# signalr publish-subscribe unsubscribe


【解决方案1】:

SignalR 并不是真正为 pub/sub 设计的,有一些基于 SignalR 构建的库可以解决这个问题,例如我自己的 https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy/wiki

这会抽象出信号器,现在您可以触发您认为适合您的域(后端)的强类型消息。客户可以收听这些消息,我的图书馆会将它们粘合在一起。

我的库不使用 SignalR 组,而是有自己的库,用于将消息路由到特定客户端。 https://github.com/AndersMalmgren/SignalR.EventAggregatorProxy/wiki/Implement-constraint-handlers

博文

http://andersmalmgren.com/2014/05/27/client-server-event-aggregation-with-signalr/

【讨论】:

  • 你这么说我有点惊讶。我的理解是 SignalR 非常适合发布/订阅(这只是它的产品之一),特别是对于一些复杂的东西,服务器对客户端的调用(反之亦然)可能会为流程增加价值——“一切都是流的概念似乎用 SignalR 和 RX (codeproject.com/Articles/851437/…) 很好地实现了
  • Xsockets 更适合开箱即用,signalr 更像是一个 RPC 框架。
  • 谢谢安德斯 - 听取您关于不使用 SignalR 来满足此类要求的建议 - 我可以使用套接字,但目前我已经使用带有回调的 WCF(主要是因为我以前使用过它) .似乎工作正常,但我会及时看看 XSockets,因为它可能是一个更强大的解决方案
猜你喜欢
  • 1970-01-01
  • 2019-03-01
  • 1970-01-01
  • 2020-08-29
  • 2016-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多