C# 管理Signal中的多个浏览器选项卡
我正在C# 管理Signal中的多个浏览器选项卡,c#,jquery,asp.net-mvc,sockets,signalr,C#,Jquery,Asp.net Mvc,Sockets,Signalr,我正在MVC4中开发一个类似facebook的聊天应用程序 我正在连接到hub,如下所示 var chat = $.connection.chatHub; $.connection.transports.longPolling.supportsKeepAlive = function () { return false; } $.connection.hub.qs = "UserID=" + $('#hdfLoggedInUserID').val(); $.connection.hub
MVC4
中开发一个类似facebook的聊天应用程序
我正在连接到hub,如下所示
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.
});
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);
}
我的hub
类如下
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.
});
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\u id
在数据库中更新时,我会根据这一点
之后,我在同一浏览器的“新建”选项卡中打开我的应用程序,然后再次调用OnConnected
方法,并在数据库中更新用户的新连接id
和状态(联机)
之后,当我关闭“新建浏览器”选项卡时,OnDiconnected
调用,数据库中的用户状态更改为脱机。但用户仍在上一个浏览器选项卡中联机
由于此问题,根据数据库,此用户处于脱机状态,但它处于联机状态
我已经做了很多的研发工作,但是找不到合适的解决方案
Q:如何解决多浏览器选项卡问题?
谢谢。谢谢
你说:
您只跟踪用户,而还需要跟踪connectionId。当用户没有活动连接ID时,他们就处于脱机状态等 这是一个伟大的想法,我实现了它。这很有效。
我正在跟踪
连接ID
。当用户没有活动连接ID时,他们将处于脱机状态,否则他们将处于联机状态。您只跟踪用户,而您还需要跟踪连接ID。当用户没有活动连接ID时,他们将脱机etcThanks@thab,这将解决我的问题。仅供参考,我通常使用HubPipeline进行此操作,以允许在任何新站点中重用。不过,我手头上没有示例代码……我也有同样的问题。你有解析码帮我吗?感谢you@LeonanMilani你可以看到这个作为参考