私は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:この複数のブラウザタブの問題を解決するにはどうすればよいですか?
ありがとうございました。
あなたはユーザーを追跡するだけで、接続IDも追跡する必要があります。ユーザーがアクティブな接続IDを持たない場合、それらはオフラインです。 – thab
ありがとうございます。これは私の問題を解決します。 – Manoj