Problem 造成Websocket突然斷線的原因很多,像是網路不穩定或是閒置過久遭server或是browser中斷連線等,都有可能導致接下來的工作不正常。因此我們需要方法去處理Websocket連線中斷的情況。本篇文章分享我們有使用過的解決方式,供大家參考。 How to? 我們Web框架使用Apache Wicket(6.22),而Server是Jetty(9.3.9)。我們最早使用的解法是在server side判斷連線狀態,但這並非百分之百的解決方式,所以最近改使用client side的解法。除此之外,ping&pong也是一種解決方法,但由於Wicket本身不支援,且套用send message去實作較複雜,因此不在本篇文章討論範圍內。 Handle On Server Side 我們在Server Side根據user request做處理,假如user request對應的Websocket連線已中斷,那我們就會透過AjaxRequestTarget送一個reload給client: public class WebSocketCheckListener extends AbstractRequestCycleListener { @Override public void onRequestHandlerScheduled ( RequestCycle cycle, IRequestHandler handler ) { if ( ! ( handler instanceof AjaxRequestTarget ) ) return ; AjaxRequestTarget target = ( AjaxRequestTarget ) handler ; Page page = target. getPage ( ) ; Application application = Application. get ( ) ; IWebSocketSettings webSocketSettings = IWebSocketSettings. Holder . get ( application ) ; IWebS...