2017-01-02 5 views
2

私は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がブラウザタブを閉じたときに呼び出されます。 これによれば、私は1つのタブを開くとOnConnectedコールとユーザーの状態(オンライン)とconnection_idデータベース内の更新。

その後、同じブラウザの新しいタブでアプリケーションを開き、OnConnectedメソッドが再度呼び出され、ユーザーの新しいconnection_idとステータス(オンライン)がデータベースに更新されます。

その後、新しいブラウザタブを閉じると、OnDiconnectedが呼び出され、ユーザーのステータスがデータベースでオフラインに変更されます。しかし、ユーザーは以前のブラウザタブではオンラインです。

この問題のため、このユーザーはデータベースに応じてオフラインですが、オンラインです。

私はすでに多くのR & Dを行っていますが、適切な解決策を見つけることができません。

Q:この複数のブラウザタブの問題を解決するにはどうすればよいですか?

ありがとうございました。

+2

あなたはユーザーを追跡するだけで、接続IDも追跡する必要があります。ユーザーがアクティブな接続IDを持たない場合、それらはオフラインです。 – thab

+0

ありがとうございます。これは私の問題を解決します。 – Manoj

答えて

2

ありがとうございましたthab

あなたは言った:

をあなたもconnectionIdを追跡する必要があるのに対し、あなたは唯一のユーザーを追跡しています。ユーザーにアクティブな接続IDがない場合、オフラインになります。

これは素晴らしいアイデアです。これを実装しました。これは素晴らしいです。 私はconnectionIdを追跡しています。ユーザーにアクティブな接続IDがない場合、ユーザーはオンラインであることを意識してオフラインになります。

+0

FYI私はこれをHubPipelineを使用してusuaullyしました。新しいサイトなどで再利用できるようにするために、私は手元にサンプルコードはありません。 – thab

+0

私は同じ問題があります。私を助ける解決コードがありますか?ありがとうございます –

+1

@LeonanMilaniこれは参照用としてご覧になれますhttps://github.com/stackmanoj/chatapp/blob/master/ChatApp/Common/ChatHub.cs – Manoj