2016-09-22 6 views
1

私はWakanda Server上にwebsocketを実装しています。私は接続されたブラウザのサーバー側を追跡しています。私がページをリロードすると、websocketのoncloseイベントが期待通りに得られます。Wakanda websocket oncloseがネットワーク切断時に発火しない

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

、私はあなたが私はあなたのWebSocket接続に関するいくつかの詳細を与える問題を理解しやすくするためにWakanda 10

答えて

2

を使用しています:

  • これは、TCP
  • を使用して、リモート・クライアントの場合( (FIN)
  • リモートクライアントがクラッシュした場合、クライアントアプリケーションを実行しているOSはサーバ(RST)に通知します
  • サーバとクライアントの間でTCP接続が開いている場合、キープアライブが有効にされていない限り、しばらくの間データが全く交換されていない場合でも接続は開いていると見なされます。
  • サーバー/クライアントが正常終了を処理できるように、WebSocket仕様にクローズメッセージが追加されます。
  • WebSocket仕様にはping/pongメッセージ交換が追加されていますが、タイムアウトはありません。 RFCから:どこ私たちはどちらかのことができ、我々は受信pingメッセージに応答しますが、私たち自身pingメッセージ

を送信しないRFCのWakandaの実装で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.

  • これは、新しい機能になります

    • pingメソッドをmessage portに公開します。pong timeout
    • websocketキープアライブオプションに設定可能な時間を追加しますwebsocket handlerを追加する瞬間に削除されます。
    • websocket handlerを追加する瞬間に、設定可能なタイムアウトでTCPキープアライブオプションを追加します。当面のために

  • 、あなたはクライアント側にすべての N秒をお好みのメッセージを送信し、 のタイムアウトTとの応答を待つことができます。応答を受け取らない場合は、接続が失われているとみなして終了することができます。

    +0

    ありがとうございます。私はそれが何か類似していると思ったいくつかの他のwebsocket実装仕様を読んだ後。私はそれが考慮すべき素晴らしい機能だと思いますが、それはあなたのチームの責任です! –