私が読んだことから、SignalRクライアントは、接続中にサーバーからのメッセージを見逃すことはありません。これは、ロング ポーリングを使用する場合には当てはまらないようです。
SignalR 1.1.2 を使用した単純なハブ ベースのアプリケーションがあります。SSE を使用している場合、タイムアウト時間内にネットワーク ケーブルを抜き差しすると、再接続が発生したことがクライアントとサーバーの両方に通知され、私の知る限り、メッセージが失われることはありません。ロングポーリングを使用すると、次のようになります。
- 接続が作成されると ($.connection.hub.start())、ハブで OnConnected メソッドが呼び出され、クライアントは接続状態になります。
- その後、ネットワーク ケーブルを抜いてすぐに元に戻すと、OnDisconnected または OnConnected への呼び出しはありません。メッセージを見逃すことはありません。サーバーで待機中のメッセージは、その後クライアントに送信されます。ここまではOK。
- ネットワーク ケーブルを抜いてロング ポールの期限が切れると、OnDisconnected への呼び出しが発生します。クライアントの状態は変化しません。
- ネットワーク ケーブルをクライアントに接続し直すと、メッセージの受信が再開されます。切断されたという通知はクライアントにありませんが、クライアントはいくつかのメッセージを見逃しています。サーバー上で OnReconnected または OnConnected への呼び出しはありません。
これはバグですか?SSE とロング ポーリングでは動作が大きく異なるようです。このシナリオでクライアントがメッセージを見逃さないようにするための推奨される戦略はありますか? サーバー上の接続 ID を追跡し、クライアントから定期的に ping を送信できます。OnDisconnected の後に ping を受信した場合は、クライアントに再同期するようにメッセージを送信できますが、これは正しいこととは思えません。 . 助言がありますか?