2013-04-08 38 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

相關問題