2013-03-21 16 views
15

我々はプロパティを別の時間を指定します。このリンクを経由してきました。SignalRのタイムアウトプロパティは

ただ、上記のポストから再度繰り返す異なる状況に:。

「クライアントがオフラインになったときにハブ再接続が直後に接続が回復、その後に発生SignalRの設定値、主としてので、以下の例のタイムスタンプを決定逐語的に時間を取ることはありません。ここ

は、いくつかの例とその結果(時間形式のM:SS)です。再接続動作を伴う:

状況1

0時は、 - クライアントが接続

を回復 - クライアントが原因ISP問題(それは接続を失い実現)

0時15への接続を失った - クライアントがサーバに接続し、OnConnectedは

午後12時10分にトリガされます

0:16 - OnReconnectedイベントが

状況2

0:00トリガされる - クライアントがサーバーに接続し、OnConn ected

午後12時10分トリガさ - 0時15分クライアントが原因イーサネットケーブルを引っ張っへの接続を失った(それが切断さだ実現していません)

を - クライアントが

二つの事はここに

を発生することがあります接続を取り戻します

A:午後12時16 - 何も起こりませんし、クライアントがその前の接続

Bとの続く:0:〜45 - クライアントは、*

その切断を実現

B:0:46 - クライアントは再接続状態に移行します

B:0:47 - クライアントは正常に再接続し、OnReconnectedイベントがトリガーされます。

状況3

午後12時00分 - クライアントは、(それが切断されます実現しない)によるイーサネットケーブルを引っ張るとの接続を失っ

- クライアントがサーバーに接続し、OnConnectedは

夜12時10がトリガされます

0:〜45 - 再接続状態

0にクライアントの移行 - クライアントがその*

午後12時46分を切断を実現

1:15 - サーバーは、クライアントが長時間経過したと判断して、それを忘れてしまい、少し後で再接続するとクライアントが受信する「切断」コマンドをキューに入れます。 ***

午前1時15分 - OnDisconnect 1時16トリガさ - クライアントがない "ソフト"(OnReconnectedをトリガしません)再接続

1時18分 - クライアントが接続

1時17分取り戻します - クライアントは、 "停止" とソフト切断を行い(OnDisconnectedをトリガしない)

状況4

コール - クライアントは、 "切断" コマンドを

1:19検索しますクライアントが実現 - 〜45:

午前0時00分 - クライアントが原因イーサネットケーブル(それが切断されています実現していません)

0を引っ張っへの接続を失った - クライアントがサーバに接続し、OnConnectedは

0時10分にトリガされますその*

0:46切断 - 再接続状態

1時15分にクライアントの移行は - サーバーは、クライアントが長すぎるために行ってきたと判断し、その後のための「切断」コマンドをキューイング、それについて忘れ若者に再接続した場合に受信するクライアントy後で。 ***

午前1時15分 - OnDisconnect 1時30トリガーされる - クライアントは**(長すぎるしようとして)

午前1時30分に再接続しようとして停止します - 切断された状態にクライアント遷移を

  • クライアントサイドキープアライブチェック:キープアライブの不足のためにクライアントがオフラインになったときを判断するために使用されます。長いポーリング転送には使用されません

**クライアント側切断タイムアウトのため:クライアントが長時間にわたって再接続したことを判断するために使用され、その間にサーバーがクライアントを忘れている可能性があります

***サーバーの切断タイムアウトのため:クライアントを忘れた場合を判断するために使用します。これは、接続がサーバー上でデッドとしてタグ付けされると、発生し始める時間です。最終的に、サーバーはクライアントのトピックの切断コマンドをキューに入れます。このコマンドは、クライアントに新しい接続を開始する必要があることをクライアントに通知します(再接続する場合)。トピックがクリーンアップされると、コマンドはサーバーから消えます。「私たちが見つけている何


たちは切断を取得することで、.NET SignalRクライアントとASP.NET MVC SignalRサーバーの間でかなり頻繁に(1及び上記2)に再接続し、また生じないことを切断します再接続(3以上4)我々はServerSentEventsプロトコルが使用されていることを知っている

我々が(増加または減少)を微調整するために必要なものタイムアウトの特性を知ることは困難であると:。。

  1. の数を減らします接続を解除して再接続します。
  2. 状況3と4では全く終了しません。

ここで重要なことは、.NET SignalR Clientは実際には常にサーバーに接続されているWindowsサービスであることです。 、我々が使用している

  • のConnectionTimeout = 110秒
  • DisconnectTimeout = 30秒
  • キープアライブ= 30秒
  • また

は、我々は現在だけであるデフォルトを、保持していますSignalR 1.0.1。

答えて

6

タイムアウトが正しく設定されています。現在のリリースでは、.netクライアントがクライアントとの接続を維持することを保証するために、クライアント側は存続しません。

次回のリリースでは、.netクライアントサイドを有効にします。あなたがプロジェクトの開発ビルドを使って作業したいなら、その機能は現在devブランチhttps://github.com/SignalR/SignalR/tree/devで利用可能です。

参考までに、https://github.com/SignalR/SignalR/issues/741と表示されているものに関する問題があります。

+1

ありがとうございました。これは我々に働く何かを与える。 PS。私はクライアント側のKeep Aliveが接続解除に役立つことを確認したらすぐに回答としてマークします。 – smitra

+0

ハハはそれが助けてくれることをうれしく思います=) –

+0

こんにちは、私は実際にdevブランチに.NETクライアント側のKeepAliveを見つけることができませんでした。これはConnectionクラスのプロパティではないようです。私が見つけることができる最も近いのは、KeepAliveDataで、IConnectionインターフェイスのタイムアウトプロパティです。私はこれが私たちが言及しているものだと思いますか? – smitra

4

SignalR 1.0.1を使用していますか?再接続プロセスのTaylorの記述は、SignalRバージョン> = 1.0およびJSクライアントに適用されます。私が尋ねる理由は、SignalR> = 1.0の場合、KeepAliveDisconnectTimeoutの3分の1以下でなければならないからです。 KeepAliveDisconnectTimeoutは絶対に同じではありません。

ただし、1.0。*の場合はKeepAliveの後にDisconnectTimeoutを設定すると、キープアライブはDisconnectTimeoutの3分の1に設定されます。あなたの場合、これは10秒のデフォルトになります。

SignalR 1.0では多くの問題が解決されています。そうでない場合は、アップグレードする価値があります。しかし、他の回答が指摘しているように、.NETクライアントはキープアライブチェックをサポートしていないため、ネットワークケーブルが取り外されたことを認識しません。1.1

P.S.何らかの形でそれが切断されていることが分かったら、手動でConnectionを手動で再起動することができます。このシナリオでは、接続IDはもちろん変更されます。

+0

こんにちは、説明をいただきありがとうございます。申し訳ありませんが、私たちはバージョン1.0.1を使用しています。元の質問が更新されました。 – smitra

+0

クライアント側のキープアライブは、1.0.1ではまだクリアされていません。 –

7

.NETクライアントはではありませんこの動作はまだありません。クライアントが突然接続を切断した場合には再接続しません。それは1.1になります。

+12

私は人々がこの答えに投票した理由について混乱しています。特に、dfowlerがこの質問についてのフレームワークを実際に書いたからです... –

+3

@davidは2.2でもこの機能を見つけられないようです。 – Krazibit312