Signalr 信号器-存储客户端信息

Signalr 信号器-存储客户端信息,signalr,Signalr,我已经开始用信号器做实验了。我一直试图想出一种灵活的方法来存储每个连接的客户机的信息。例如,在聊天应用程序中存储姓名,而不是在每条消息中传递姓名 目前,我有一个静态字典,它将connectionId与包含这些属性的对象相匹配。我在连接时添加到字典中,在断开连接时删除 我遇到的问题是,我似乎没有得到所有断开连接的事件。如果我在Chrome中关闭一个标签,断开的连接似乎会通过。但是,如果快速重新加载选项卡,断开连接似乎不会发生(至少不会“干净”)。例如,如果我一次又一次地重新加载同一个选项卡,它会告

我已经开始用信号器做实验了。我一直试图想出一种灵活的方法来存储每个连接的客户机的信息。例如,在聊天应用程序中存储姓名,而不是在每条消息中传递姓名

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

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


有没有标准的方法来存储这种每连接信息?否则,是什么导致了我的问题?

您实际上正确地处理了连接id数据。确保仅在OnConnected中实例化用户数据,而在OnDisconnected中未实例化用户数据

在您的页面上发送垃圾邮件刷新时,会出现导致OnDisconnected事件无法立即触发的情况。但是,您不应该担心这一点,因为信号器实际上会在指定的超时(DisconnectTimeout)后超时连接并触发OnDisconnected事件

如果您确实遇到OnConnected和OnDisconnected事件之间没有1:1相关性的场景(在相当长的一段时间之后),请确保在上提交错误

最后,如果你想做一些高级的聊天技巧并寻找一些灵感,那么这是开源的


希望这有帮助

是的,谢谢,这很有帮助。听到我做对了总是很高兴!我不知道超时-这是可配置的吗?另外,我需要如何处理OnReconnect事件?是的!GlobalHost.Configuration.DisconnectTimeout。对于重新连接,您应该检查用户是否存在,如果存在,则不执行任何操作,如果不存在,则添加它=)。检查用户是否存在-这是否意味着是否存在具有提供的connectionID的条目?我仍然有点不清楚连接到底代表什么,它的生命周期是什么,等等。我将对文档进行全面阅读。连接代表客户机。当我说检查用户是否存在时,你可以在静态用户字典中查找。另一方面,我建议使用ConcurrentDictionary=)