gpt4 book ai didi

SignalR - 处理断开连接的用户

转载 作者:行者123 更新时间:2023-12-04 12:23:11 25 4
gpt4 key购买 nike

嗨,

我在一个项目中使用 signalR 库来处理通知和聊天模块。我有一个数据库表来跟踪在线用户。

用于聊天的 HUB 继承了 IDisconnect,我在此断开用户连接。断开用户连接后,我向用户表示关于该事件的热情。此时,我检查断开连接的用户是否是客户端。如果是,那么我在 HUB 上调用一个方法来重新连接用户(只需更新表)。

我这样做是因为在当前的实现中,一旦用户关闭浏览器上的一个选项卡,它就会调用 Disconnect 任务,但他可以打开另一个选项卡。

我还没有测试过这个模块(有更大的请求),但是在我的开发服务器上,IDisconnect 事件和用户再次连接的请求之间可能需要几秒钟。

我担心我的实现来处理与聊天断开连接的用户,但我看不到另一种改进方法。

如果可能的话,有人可以给我一个建议吗,或者这是我唯一的解决方案?

更新 :我最终使用了一个单例类来存储来自 signalr 的所有用户及其连接 ID。这样,我可以在断开连接任务期间从用户那里获取 id(此时您没有任何 httpcontext 来获取用户信息,但您始终可以从单例中的数组中获取带有 signalr 的连接 id 的用户 id类(class))。

20-02-2013 尽管上述解决方案可以完成工作,但我需要扩展我的项目。我的解决方案是使用 Redis 存储所有用户连接,并利用断开事件的 key 过期时间。在重新连接期间,我检查 key 是否处于挂起状态(几分钟后到期)。

最佳答案

您可以查看JabbR ,一个建立在 SignalR 之上的多房间聊天应用程序,解决了这个问题:https://github.com/JabbR/JabbR/blob/master/JabbR/Hubs/Chat.cs

它基本上保持了 User<->ConnectionId 的 1:N 映射,因此当最后一个连接断开时,可以将用户标记为“离线”。

关于SignalR - 处理断开连接的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12234507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com