2

我已经开始尝试使用 SignalR。我一直在尝试想出一种灵活的方式来存储有关每个连接的客户端的信息。例如,将名称存储在聊天应用程序中,而不是随每条消息一起传递。

目前,我有一个静态字典,它将 connectionId 与包含这些属性的对象相匹配。我在连接时添加到此字典,并在断开连接时删除。

我遇到的问题是我似乎没有收到所有断开连接事件。如果我关闭 Chrome 中的选项卡,则断开连接似乎会通过。但是,如果我快速重新加载选项卡,则似乎不会发生断开连接(至少不是“干净地”)。例如,如果我一遍又一遍地重新加载同一个标签,它会告诉我我的字典应该有多个项目 - 理论上仍然是一个。

是否有存储这种每个连接信息的标准方法?否则,什么可能导致我遇到的问题?

4

1 回答 1

1

您实际上正在正确处理连接 ID 数据。确保您只在 OnConnected 中实例化您的用户数据,并在 OnDisconnected 中取消实例化它。

在您的页面上刷新垃圾邮件时,有些情况会导致 OnDisconnected 事件未立即触发。但是您不必担心这一点,因为 SignalR 实际上会超时连接并在指定的超时 (DisconnectTimeout) 后触发 OnDisconnected 事件。

如果您确实遇到 OnConnected 和 OnDisconnected 事件(经过大量时间后)没有一对一关联的情况,请确保在https://github.com/SignalR/SignalR/issues提交错误.

最后,如果您正在寻找一些高级聊天机制并寻找灵感,请查看JabbR,它是开源的!

https://github.com/davidfowl/JabbR

希望这可以帮助!

于 2013-02-25T18:28:14.397 回答