我正在開發一個類似於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