【问题标题】:Manage multiple browser tabs in signalr在 Signalr 中管理多个浏览器选项卡
【发布时间】:2018-09-26 23:35:50
【问题描述】:

我正在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 调用并且用户的状态在数据库中更改为脱机。但用户在之前的浏览器选项卡中仍然在线。

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

我已经为此做了很多研发,但找不到任何合适的解决方案。

问:如何解决这个多浏览器标签问题?

谢谢。

【问题讨论】:

  • 您只是在跟踪用户,而您还需要跟踪 connectionId。当用户没有活动的 connectionIds 时,他们处于离线状态等
  • 谢谢@thab 这将解决我的问题。

标签: c# jquery asp.net-mvc sockets signalr


【解决方案1】:

谢谢thab

你说:

您只是在跟踪用户,而您还需要跟踪 connectionId。当用户没有活动的 connectionIds 时,他们就处于离线状态等

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

【讨论】:

  • 仅供参考,我通常使用 HubPipeline 完成此操作 - 以允许在任何新站点等中重用。虽然我手头没有示例代码...
  • 我也有同样的问题。你有帮助我的解决方案代码吗?谢谢
  • @LeonanMilani 你可以看到这个供参考github.com/stackmanoj/chatapp/blob/master/ChatApp/Common/…
猜你喜欢
  • 1970-01-01
  • 2011-09-01
  • 2012-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多