我开始尝试使用SignalR。我一直在尝试提供一种灵活的方式来存储有关每个连接客户端的信息。例如,将名称存储在聊天应用程序中,而不是将其与每条消息一起传递。
目前,我有一个静态字典,它将connectionId与包含这些属性的对象相匹配。我在连接时添加到这个字典,并在断开连接时删除。
我遇到的问题是我似乎没有得到所有断开事件。如果我关闭Chrome中的标签页,则会断开连接。但是,如果我快速重新加载选项卡,则似乎不会发生断开连接(至少不是'干净')。例如,如果我反复重新加载相同的标签,它会告诉我我的字典应该有多个项目 - 理论上仍然是一个。
是否存在存储此类连接信息的标准方法?否则,可能导致我遇到的问题是什么?
答案 0 :(得分:1)
您实际上正确处理连接ID数据。确保您只在OnConnected中实例化您的用户数据并在OnDisconnected中取消实例化。
在页面上发送垃圾邮件时,有些情况会导致OnDisconnected事件无法立即触发。但是你不应该担心这一点,因为SignalR实际上会超时连接并在指定的超时(DisconnectTimeout)后触发OnDisconnected事件。
如果您遇到OnConnected和OnDisconnected事件没有一对一关联的情况(在很长一段时间后),请确保在https://github.com/SignalR/SignalR/issues提交错误。
最后,如果您正在寻找一些高级聊天机制并寻找一些灵感,请查看JabbR,它是开源的!
https://github.com/davidfowl/JabbR
希望这有帮助!