什么时候OnWebSocketClose在Jetty 9中触发

时间:2013-04-08 20:38:07

标签: websocket jetty embedded-jetty

我有一个简单的嵌入式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连接到服务器的spock测试。我获得了成功的连接,可以来回发送消息。

但是,从不调用onClose()(当我调用async-http-client的websocket.close()或client.close()时,或者甚至在测试JVM死亡时)。

我预计当套接字的远端消失时,onClose会立即触发。

1 个答案:

答案 0 :(得分:0)

onClose()将触发以指示本地侧websocket已将状态更改为已关闭。

它可能来自:

  • 远程端点(也称为干净关闭)
  • 已收到正确的websocket关闭握手
  • 将尝试发出干净关闭的任何协议违规(在解析或生成中)(状态代码1002)。注意:由于这种情况的性质,这种关闭可能不是一个干净的近距离握手。
  • 连接超时,导致异常(非干净)关闭。 (状态代码1006)
  • 套接字上的任何读取I / O异常,导致异常(非干净)关闭。 (状态代码1006)
  • 套接字上的任何写入I / O异常,导致异常(非干净)关闭。 (状态代码1006)