1

Wakanda Server に websocket を実装しています。接続されたブラウザのサーバー側を追跡しています。ページをリロードすると、期待どおりに websocket の onclose イベントが発生します。

ネットワーク接続を切断すると、このイベントも発生すると予想していました。私は誤解していますか?Websocket クライアントへのネットワーク接続が失われたときに関数を起動する方法はありますか?

参考までに、私はWakanda 10を使用しています。

4

1 に答える 1

2

問題を理解するのに役立つように、websocket 接続に関する詳細を説明します。

  • TCPを使用しています
  • リモート クライアント (ブラウザなど) が正常に TCP 接続を閉じると、サーバーに通知されます (FIN)
  • リモート クライアントがクラッシュした場合、クライアント アプリケーションを実行している OS がサーバーに通知します (RST)。
  • サーバーとクライアントの間で TCP 接続が開いている場合、キープアライブがアクティブ化されていない限り、しばらくの間データの交換がまったくなくても、接続は開いていると見なされます。
  • WebSocket 仕様はクローズ メッセージを追加して、サーバー/クライアントが適切なクローズを処理できるようにします
  • WebSocket 仕様は ping/pong メッセージ交換を追加しますが、タイムアウトは課しません。RFCから: Upon receipt of a Ping frame, an endpoint MUST send a Pong frame in response, unless it already received a Close frame. It SHOULD respond with Pong frame as soon as is practical.
  • Wakanda の RFC 実装では、受信したメッセージに応答しますが、独自のメッセージpingは送信しません。ping

これは、次のいずれかを実行できる新機能です。

  • pingを介してメソッドを公開message portするpong timeout
  • websocket handler. _
  • を追加する際にタイムアウトを設定できる TCP キープアライブ オプションを追加しますwebsocket handler

とりあえず、選択したメッセージをN秒ごとにクライアント側に送信し、タイムアウトTで応答を待つことができます。応答を受信しない場合は、接続が失われたと見なして閉じることができます。

于 2016-10-03T08:01:56.810 に答える