【问题标题】:SignalR: Does OnDissconnect event of a hub can be called only for a specific hub?SignalR:是否只能为特定集线器调用集线器的 OnDissconnect 事件?
【发布时间】:2023-03-29 12:02:02
【问题描述】:

假设我的 SignalR 应用上有 2 个集线器。 我在本地缓存字典上映射connectionsIds -> userIds。

目前的逻辑是这样的:

使用 OnConnected --> 向字典中添加一个新的“connectionId to userId”条目(如果它不存在)。

使用 OnDisconnected --> 从字典中删除“connectionId to userId”条目(如果存在)

是否存在 Hub1 断开而 Hub2 保持连接的情况?

如果是这样,我当前的逻辑是有缺陷的,因为即使 Hub2 仍然连接,它也会从字典中删除条目。解决这个问题需要我为每个集线器处理 2 个字典。

附:我查看了用于处理连接映射的 SignalR 文档,并且似乎他们总是在每个集线器使用一个字典。所以我想知道它是否真的有必要。

【问题讨论】:

  • 嗨 Ofir。只是一个建议,您可以考虑使用单用户组来保留此映射。它更容易实现,您不必为维护字典而感到压力。检查this
  • 非常优雅的解决方案!我想我会走这条路。谢谢

标签: mapping signalr connection


【解决方案1】:

根据文档 Signalr 为多个集线器共享一个连接。因此,如果您收到对 OnDisconnect 的调用,则应断开所有集线器。

SignalR 2.0 已更新为通过一个信号处理多个集线器 连接而不会损失性能。

http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-server#multiplehubs

【讨论】:

  • 你说得对,我看过 HubDispatcher 类的代码,该函数获取所有集线器并在所有连接的集线器上执行断开连接事件。
  • ASP.NET Core 现在使用每个 Hub 一个连接,这是一个问题,因为在 iOS 上限制为 4 个连接,呃。
猜你喜欢
  • 1970-01-01
  • 2012-09-06
  • 1970-01-01
  • 2013-11-23
  • 1970-01-01
  • 1970-01-01
  • 2022-08-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多