2017-01-02 77 views
2

我正在開發一個類似於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,但找不到任何妥善的解決辦法。

問:我怎樣才能解決這個多個瀏覽器標籤的問題?

謝謝。

+2

您只跟蹤用戶,而您需要跟蹤connectionId。當用戶沒有活動connectionIds然後他們是離線等 – thab

+0

謝謝@thab這將解決我的問題。 – Manoj

回答

2

謝謝thab

你說:

你只跟蹤用戶,而你需要跟蹤的ConnectionId也。當用戶沒有活動connectionIds然後他們是離線等

這是一個好主意,我實現了這一點。這很好。我正在跟蹤connectionId。當用戶沒有活動的連接ID時,他們將脫機,其他人將會在線。

+0

僅供參考我已經使用HubPipeline完成了這項工作 - 允許在任何新網站中重複使用等。我沒有手頭上的示例代碼... – thab

+0

我有同樣的問題。你有解析代碼來幫助我嗎?謝謝 –

+1

@LeonanMilani你可以參考https://github.com/stackmanoj/chatapp/blob/master/ChatApp/Common/ChatHub.cs – Manoj

相關問題