1

我搜索了 google、SignalR wiki 和 SignalR 代码本身(例如,广播功能、Signaler 等),但一无所获。

我写了 ClientIDFactory 并成功地将 ClientID 设置为 UserID。它可以工作,但现在用户无法从多个浏览器/选项卡进行连接。

我修改了函数并将随机字符串添加到 UserID。有用。

现在我需要找到一种方法来获取用户的所有连接,将特定的消息发送到特定的 UserID。

我考虑循环客户端列表,并通过 string.split() 找到 UserID,但其他方式可能有用。

我没有使用集线器。只有持久连接。

谢谢,

4

1 回答 1

2

我认为您的方法不正确,因此这已经浮出水面。您在服务器端有连接和断开连接方法可以连接。在连接上,您需要与一些元数据保持连接,然后即使服务器重新启动,您也可以检查元数据以获取唯一用户或唯一客户端并使用新 ID 重新连接它们。

例如

  1. 如果您从移动设备购买商品并且您没有登录(没有与用户相关的元数据)并且您在购物篮中放置了 2 件商品。当您进入桌面时,您不会在篮子中看到这两个项目,因为服务器无法与来自同一台机器的同一用户相关联。
  2. 如果您已登录(元数据,如电子邮件或附加到当前连接 ID 的用户名)并且您从移动设备浏览并在购物篮中添加 2 项。当您登录到您的桌面时(新的连接 ID 可以与相同的元数据电子邮件或用户 ID 链接),然后您可以告诉它是同一用户。如果您随后需要向该用户发送消息,则必须将其发送到两个客户端 ID,您可以通过将它们分组或将其发送到两个 ID 来完成。

如果客户端丢失了连接 ID,它应该断开连接,并且在新连接上它将有新的连接 ID,因此您应该考虑映射它们。如果我连接来自 7 个不同手机的 7 个 ID,只要您的系统知道它们都是此通知的预期接收者,通知就会发送给所有 7 个。持久化这些知识的实现不是 signalR 的一部分,因此您必须自己实现它。

于 2017-11-07T14:09:42.647 回答