web-dev-qa-db-ja.com

SignalRイベントを使用して接続を正しい方法で維持する方法は?

SignalR、ASP.NET、C#を使用して、リアルタイムのクライアントサーバーアプリケーションを開発しています。ホストおよびVS2013としてlocalhostを使用しています。

私の質問は:

  1. なぜ私なら 閉じる サーバー、ウェブクライアントで「再接続「イベントが発生しますか?

  2. 「切断」イベントは後に発生します 40秒以上 のみ。この時間を短縮する方法は?

  3. 起動時にサーバーに接続するクライアントが必要です。 「再接続」イベントは 固定間隔 のみ。 「再接続」間隔が終了した場合、クライアントは新しいクライアントとして接続する必要があります。この目標をアーカイブする方法は?

最後に、私は尋ねたい-どのように 生き続ける 接続を使用して SignalR 正しい方法

私はこのコードを使用しています:

C#

public override Task OnDisconnected()
{
clientList.RemoveAt(nIndex);
Console.WriteLine("Disconnected {0}\n", Context.ConnectionId);
return (base.OnDisconnected());
}

public override Task OnReconnected()
{
Console.WriteLine("Reconnected {0}\n", Context.ConnectionId);
return (base.OnReconnected());
}

Javascript

$.connection.hub.reconnected(function () {
// Html encode display name and message.
var encodedName = $('<div />').text("heartbeat").html();
var now = new Date();

// Add the message to the page.
$('#discussion').append('Reconnected to server: ' + now + '</br>');
});

$.connection.hub.disconnected(function () {
// Html encode display name and message.
var encodedName = $('<div />').text("heartbeat").html();
var now = new Date();
// Add the message to the page.
$('#discussion').append('Disconnected from server: ' + now + '</br>');
});

接続出力後:

message received from server : Fri Feb 21 2014 10:53:02

サーバーのクローズ出力後:

Reconnected to server: Fri Feb 21 2014 10:53:22 <-- Why, if i close server ???
Disconnected from server: Fri Feb 21 2014 10:53:53 <-- Why 40+ seconds after the server is closed ?
19
Dmitry Kazakov

1.私の後 閉じる サーバー、ウェブクライアントで「再接続「イベントが発生し、」切断する"イベントは後に発生します。なぜですか?

SignalRは、サーバーを閉じることとサーバーを再起動することの違いを判断できません。このため、サーバーがシャットダウンすると、サーバーが実際に再起動する場合にクライアントが再接続を試行し始めます。

2.「切断」が発生します 30秒以上 不明な「再接続」の後。この時間を短縮する方法は?

この30秒のタイムアウトは、 DisconnectTimeoutプロパティ を使用して変更できます。

3.起動時にサーバーに接続するクライアントが必要です。 「再接続」は、 固定間隔 のみ。 「再接続」間隔が終了した場合、クライアントは新しいクライアントとして接続する必要があります。

切断されたイベントで接続を開始する 、できれば再起動した場合のサーバーの負荷を減らすためにタイムアウト後にする必要があります。

$.connection.hub.disconnected(function() {
    setTimeout(function() {
        $.connection.hub.start();
    }, 5000); // Re-start connection after 5 seconds
});

SignalRの接続ライフタイムイベントの理解と処理 の記事全体は、おそらくあなたの質問に関連しています。

29
halter73