2013-04-08 37 views
1

我有一个简单的嵌入式Jetty 9 websocket服务器。我有我的注释的WebSocket实现这样的方法:OnWebSocketClose在Jetty 9中何时触发

@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) 
} 

我有一个连接到使用异步HTTP客户端与服务器的斯波克测试。我获得了成功的连接并可以来回发送消息。 (当我调用async-http-client的websocket.close()或client.close()或甚至当测试JVM死亡时),onClose()永远不会被调用。

我希望onClose能够在套接字远端消失时立即触发。

回答

0

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

它可以导致:

  • 一个适当的WebSocket靠近握手已经由远程端点(也称为一个干净的接近)
  • 任何违反协议(在分析或产生),其将尝试接收发出一个干净的关闭(状态代码1002)。注意:由于这种情况的性质,这个收盘可能不是一次干净的握手。
  • 连接超时,导致异常(非干净)关闭。 (状态码1006)
  • 在套接字上发生任何读取I/O异常,导致异常(非干净)关闭。 (状态码1006)
  • 在套接字上发生任何写入I/O异常,导致异常(非清除)关闭。 (状态码1006)
+0

谢谢Joakim!这绝对是我对onClose何时应该开火的理解。但令人遗憾的是,并非我所看到的。我无意中想知道这是我的造币机器上的本地网络中的东西,但我没有追求这一点。我已经转向使用气氛,这似乎工作正常。 – Theo 2013-05-09 02:50:01

+0

你是对的。有几个密切的错误。 [406449](https://bugs.eclipse.org/bugs/show_bug.cgi?id=406449)和[404991](https://bugs.eclipse.org/bugs/show_bug.cgi?id=404911)最近[修复并在Jetty 9.0.3.v20130506中发布](http://dev.eclipse.org/mhonarc/lists/jetty-announce/msg00049.html)请尝试使用该版本。 – 2013-05-09 12:45:09

+0

如何重新连接OnClose方法? – Alireza 2017-05-17 05:21:38

相关问题