如何将唯一标识符传递给 SignalR client/Server 连接?

How do I pass a unique identifier to a SignalR client/Server connection?

我正在考虑为我的系统使用 Signal R

我系统的每个用户都观看一小组数据。

例如,Fred smith(用户 ID 1)可能想知道黄金的价格

UserID 2 想知道黄金和白银的价格

全天会有数百个价格通过市场

当新价格通过我的系统时,我正在考虑查看登录的用户,看看他们中是否有人关心已经进来的价格

如果用户关心,我想将价格发送到客户端实例

我不想在每个价格出现时通知所有 Signal R 客户,因为那样会产生太多数据!

我假设这依赖于能够存储客户端生成的东西,然后通过与集线器的连接传递它

Signal R 支持吗?我看不到任何明显的东西吗?

我可以完全控制我的集线器。

目前,我打算将数据写入数据库,我使用 SQL 依赖来触发集线器运行

我在 MVC 5 中使用 Signal R

干杯

保罗

可能性A)使用信号R的分组机制

  • 我建议您为每个 "item"(金、银、....)创建一个组。 在用户登录的情况下,您应该查看他在哪些项目中 感兴趣并订阅这些群组。

    Groups.Add(...) 在您的中心方法中)

  • 因此,如果项目的值发生变化,您可以发送新的 对所有订户(对某个群体感兴趣的客户)的价值

    Clients.Group(groupName).newItemValue(YOURIDEMID, YOURNEWVALUE);

您可以在此处找到有关使用 signalr 进行分组的更多详细信息: https://docs.microsoft.com/en-us/aspnet/signalr/overview/guide-to-the-api/working-with-groups

可能性B) 自己处理

  • 如果客户端连接到服务器,请保存此客户端的 ID。同时转到您的数据库并显示该客户感兴趣的项目。 --> 最后,您应该有一个字典,其中包含已连接客户端的 ID (id) 以及作为值的包含感兴趣项目的列表。
  • 如果某个项目的值发生变化,您将遍历所有连接的客户端和搜索对该项目感兴趣的客户端。最后向他们发送新值。