我正在开发一个类似于facebook的聊天应用程序MVC 4
。管理信号器中的多个浏览器选项卡
我连接到集线器像下面
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
电话和用户的状态更改数据库脱机。但用户仍然在以前的浏览器选项卡上在线。
由于此问题,此用户根据数据库脱机,但它在线。
我已经做了很多关于它[R & d,但找不到任何妥善的解决办法。
问:我怎样才能解决这个多个浏览器标签的问题?
谢谢。
您只跟踪用户,而您需要跟踪connectionId。当用户没有活动connectionIds然后他们是离线等 – thab
谢谢@thab这将解决我的问题。 – Manoj