SignalR:获取PersistentConnection的客户端列表

时间:2011-11-20 10:51:44

标签: vb.net signalr

我搜索了google,SignalR wiki和SignalR代码本身(例如,广播功能,Signaler等),但没有找到任何内容。

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

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

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

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

我没有使用Hub。只有PersistentConnection。

谢谢,

1 个答案:

答案 0 :(得分:1)

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

例如

  1. 如果您从手机购买商品而您尚未登录(没有与用户相关的元数据)并且您在购物篮中放置了2件商品。当你在桌面上移动时,你不会在篮子里看到这两个项目,因为服务器不能与来自同一台机器的同一用户有关。
  2. 如果您已登录(元数据,如电子邮件或附加到当前连接ID的用户名),您可以从手机浏览并在购物篮中添加2个项目。当您登录到桌面时(新的连接ID可以与相同的元数据电子邮件或用户ID链接)然后您可以告诉它是同一个用户。如果您需要向该用户发送消息,则必须将其发送到两个客户端ID,您可以通过将它们分组或将其发送到两个ID来完成。
  3. 如果客户端丢失了连接ID,它应该断开连接,并且在新连接上它将具有新的连接ID,因此您应该考虑映射它们。 如果我连接7个不同手机的7个ID,只要您的系统知道他们都是此通知的预定接收者,就会向所有7个用户发送通知。持久保存这些知识的实现不是signalR的一部分,所以你必须自己实现它。