gpt4 book ai didi

c# - 在 signalr 中管理多个浏览器选项卡

转载 作者:行者123 更新时间:2023-11-30 23:17:28 27 4
gpt4 key购买 nike

我正在使用 MVC 4 开发一个像 facebook 这样的聊天应用程序。

我像下面这样连接到集线器

var chat = $.connection.chatHub;

$.connection.transports.longPolling.supportsKeepAlive = function () {
return false;
}
$.connection.hub.qs = "UserID=" + $('#hdfLoggedInUserID').val();
$.connection.hub.start().done(function () {
//...
});
$.connection.hub.disconnected(function () {
setTimeout(function () {
$.connection.hub.start();
}, 5000); // Restart connection after 5 seconds.
});

我的 hub 类如下所示

    public override Task OnConnected()
{
var userID = Context.QueryString["UserID"];
if (userID != null)
{
//set user online in database and save connection_id
RefreshOnlineUsers(uId);
}
return base.OnConnected();
}
public override Task OnDisconnected(bool stopCalled)
{
var userID = Context.QueryString["UserID"];
if (userID != null)
{
//set user offline in database
RefreshOnlineUsers(uId);
}
return base.OnDisconnected(stopCalled);
}

当我只使用一个浏览器选项卡时,它工作正常。

OnConnected 在浏览器选项卡打开时调用,OnDisconnected 在浏览器选项卡关闭时调用。因此,根据这一点,当我打开一个选项卡时,OnConnected 调用和用户状态(在线)和 connection_id 在数据库中更新。

之后,我在同一浏览器的新选项卡中打开我的应用程序,然后再次调用 OnConnected 方法,并在数据库中更新用户的新 connection_id 和状态(在线)。

之后,当我关闭新的浏览器选项卡时,OnDiconnected 调用并且用户的状态在数据库中更改为离线。但用户在之前的浏览器选项卡中仍然在线。

由于这个问题,根据数据库,该用户处于离线状态,但它在线。

我已经对此进行了大量的研发,但找不到任何合适的解决方案。

问:如何解决这个多浏览器选项卡问题?

谢谢。

最佳答案

谢谢 thab .

你说:

You are only tracking the user whereas you need to track the connectionId also. When the user has no active connectionIds then they are offline etc

这是个好主意,我实现了它。这很好用。我正在跟踪 connectionId 。当用户没有事件的 connectionIds 时,他们将离线,否则他们将在线。

关于c# - 在 signalr 中管理多个浏览器选项卡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41424081/

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