1

シンプルな組み込みの Jetty 9 Websocket サーバーがあります。注釈付きの websocket 実装には、次のようなメソッドがあります。

@OnWebSocketClose
void onClose(int statusCode, String reason) {
    logger.info "Closed connection [${this}]"
    connectionManager.remove(this)
    Event closeEvent = commsEventFactory.buildCloseEvent(this, statusCode, reason)
    eventReceiver.postEvent(closeEvent)
}

async-http-client を使用してサーバーに接続するスポック テストがあります。接続に成功し、メッセージを送受信できます。

ただし、onClose() は呼び出されません (async-http-client の websocket.close() または client.close() を呼び出したとき、またはテスト JVM が終了したときでも)。

ソケットの遠端が消えるとすぐに onClose が起動することを期待していました。

4

1 に答える 1

1

onClose() は、ローカル側の Websocket の状態がクローズに変更されたことを示すために発生します。

それは次の結果として生じる可能性があります。

  • リモート エンドポイントが適切な Websocket クローズ ハンドシェイクを受信しました (クリーン クローズとも呼ばれます)。
  • クリーン クローズを発行しようとするプロトコル違反 (解析中または生成中) (ステータス コード 1002)。注: この状況の性質上、このクローズはクリーンなクローズ ハンドシェイクではない可能性があります。
  • 異常な (非クリーンな) クローズにつながる接続タイムアウト。(ステータスコード 1006)
  • ソケットでの読み取り I/O 例外により、異常な (非クリーンな) クローズが発生します。(ステータスコード 1006)
  • ソケットでの書き込み I/O 例外により、異常な (非クリーンな) クローズが発生します。(ステータスコード 1006)
于 2013-04-25T17:26:48.063 に答える