1

(JavaScript) ハブ クライアントについての私の理解では、接続が失われると、再接続を試みる「再接続中...」フェーズに入るということです。それができない場合は、「切断」状態になり、再度開始するように求められるまでそこにとどまります。

「再接続中...」フェーズは、あきらめる前にどれくらい続くことを意味していますか? 私は 40 秒前に読んだことがありますが、クライアントの所要時間ははるかに短いようです。[編集: この部分は気にしないでください。サーバーで 10 の切断をテストとして構成しましたが、忘れていました。これは、ネゴシエート中にサーバーによって設定されることを理解しています。理にかなっています!] ... 中断するように指示されるまで、クライアントに継続的に再試行させたいと思います - これを行うことはできますか? また、問題が発生しますか?

別の質問です。Reconnecting... フェーズで、ハブ メソッドを (再び JS で) 呼び出そうとすると、完了しないようです。返された Deferred を使用して「完了」および「失敗」イベントをチェックしていますが、どちらも呼び出されないようです。これは設計によるものですか?

ありがとう。

4

2 に答える 2

2

あなたは間違いなくそれを継続的に再接続させることができます.

クライアントで切断イベントを処理し、connection.start を呼び出します。

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

これが引き起こす唯一の問題は、クライアント マシン用に存在しないサーバーに対して無限の要求をトリガーする可能性があることです。この状況にモバイル市場を導入すると、これはさらに厄介になります (バッテリーが狂ったように消耗します)。

再接続中にハブ メソッドを呼び出そうとすると、SignalR はコマンドを送信しようとします。データの受信用と送信用の 2 つのチャネルがあるため (Web ソケットを除くすべてのトランスポート用)、場合によっては、オフラインでもリクエストを送信できます。したがって、SignalR は、ブラウザーが要求を正常に作成できなかったことを通知するまで、要求が失敗したかどうかを認識しません。

お役に立てれば!

于 2013-02-28T00:35:19.360 に答える
0

手がかりがあるかもしれません... Web.configに触れるとappPoolリサイクルが生成されます。つまり、新しいリクエストに対して新しいワーカープロセスが作成され、既存のプロセスは残りのリクエストが終了するかタイムアウトに達するまでしばらく継続します。タイムアウト期間内に終了しないリクエストは終了します。

Signalr クライアントは、長時間実行されるタスクが古いプロセスで実行されている間に新しいプロセスに再接続するため、長時間実行されるタスクでは、

GlobalHost.ConnectionManager.GetHubContext<ForceHub>();

クライアントが「新しい」ハブに接続されている間に、実際には「古い」ハブの参照を取得します。これが、Wasp によって実行されたテストが機能した理由です。彼は、新しく作成されたワーカー プロセスで処理されたシグナル ハブで発行する新しい要求を行っていました。

singalr バックプレーン ( https://www.asp.net/signalr/overview/performance/scaleout-in-signalr ) の構成を試すことができます。Sql Server ( https://www.asp. net/signalr/overview/performance/scaleout-with-sql-server )。バックプレーンは 2 つのワーカー プロセスを接続できる必要があり、うまくいけばクライアントで通知を受け取ることができます。

これが問題である場合、新しいリクエストによって生成された通知は、バックプレーンがなくても機能します。バックプレーンの本当の目的はシグナルをスケールアウトすることであることに注意してください。これは、それらの間で WebServer のファームを接続することです。

また、IIS 内で実行時間の長いタスクを実行することは、IIS が定期的に appPool をリサイクルし、実行する要求のタイムアウト制限があるため、タスクを達成するのが難しいことにも注意してください。次の投稿を読むことをお勧めします : http://www.hanselman.com/blog/HowToRunBackgroundTasksInASPNET.aspx 私はあなたのスキルを非難しているわけではありません。さらに、なぜそうしなければならないのですか?」</p>

お役に立てれば

于 2017-01-12T11:40:35.530 に答える