最近我一直在使用帶註釋的websocket,並使用Jetty API (9.4.5 release)
進行了聊天。Jetty Websocket IdleTimeout
但是我5分鐘後(我相信是默認計時器)出現問題,會話關閉(不是由於錯誤)。 我找到的唯一解決方案是通知我的套接字關閉事件並在新的套接字中重新打開連接。
但是我讀過計算器,通過在WebsocketPolicy設置IdleTimeOut
,我可以迴避的問題:
我試過設置爲
3600000
的實例,但是行爲不會改變時所有我也試圖將其設置爲
-1
但我得到以下錯誤:IdleTimeout [-1] must be a greater than or equal to 0
private ServletContextHandler setupWebsocketContext() { ServletContextHandler websocketContext = new AmosContextHandler(ServletContextHandler.SESSIONS | ServletContextHandler.SECURITY); WebSocketHandler socketCreator = new WebSocketHandler(){ @Override public void configure(WebSocketServletFactory factory){ factory.getPolicy().setIdleTimeout(-1); factory.getPolicy().setMaxTextMessageBufferSize(MAX_MESSAGE_SIZE); factory.getPolicy().setMaxBinaryMessageBufferSize(MAX_MESSAGE_SIZE); factory.getPolicy().setMaxTextMessageSize(MAX_MESSAGE_SIZE); factory.getPolicy().setMaxBinaryMessageSize(MAX_MESSAGE_SIZE); factory.setCreator(new UpgradedSocketCreator()); } }; ServletHolder sh = new ServletHolder(new WebsocketChatServlet()); websocketContext.addServlet(sh, "/*"); websocketContext.setContextPath("/Chat"); websocketContext.setHandler(socketCreator); websocketContext.getSessionHandler().setMaxInactiveInterval(0); return websocketContext; }
我也嘗試直接在OnConnect
事件中使用調用session.getpolicy.setIdleTimeOut()
更改策略,但我沒有注意到任何結果。
這是預期的行爲還是我錯過了什麼?謝謝你的幫助。
編輯:在封閉
登錄: 客戶端:
2017-07-03T12:48:00.552 DEBUG [email protected] Ignored idle endpoint [email protected]{localhost/127.0.0.1:5080<->/127.0.0.1:53835,OPEN,fill=-,flush=-,to=1/300000}{io=0/0,kio=0,kro=1}->[email protected][[email protected][CLOSING,in,!out,close=CloseInfo[code=1000,reason=null],clean=false,closeSource=LOCAL],f=Flusher[queueSize=0,aggregateSize=0,failure=null],g=Generator[CLIENT,validating],[email protected][ExtensionStack,s=START,c=0,len=187,f=null]]
服務器端:
2017-07-03T12:48:00.595 DEBUG Idle pool thread onClose [email protected][[email protected][CLOSED,!in,!out,finalClose=CloseInfo[code=1000,reason=null],clean=true,closeSource=REMOTE],f=Flusher[queueSize=0,aggregateSize=0,failure=null],g=Generator[SERVER,validating],[email protected][ExtensionStack,s=START,c=0,len=2,f=CLOSE[len=2,fin=true,rsv=...,masked=true]]]<[email protected]'{'/127.0.0.1:53835<->/127.0.0.1:5080,CLOSED,fill=-,flush=-,to=1/360000000}'{'io=0/0,kio=-1,kro=-1}->[email protected][[email protected][CLOSED,!in,!out,finalClose=CloseInfo[code=1000,reason=null],clean=true,closeSource=REMOTE],f=Flusher[queueSize=0,aggregateSize=0,failure=null],g=Generator[SERVER,validating],[email protected][ExtensionStack,s=START,c=0,len=2,f=CLOSE[len=2,fin=true,rsv=...,masked=true]]]
2017-07-03T12:48:00.595 DEBUG Idle pool thread [email protected]e2 invoked org.eclipse.jetty.io.ManagedSelector$$Lambda$193/[email protected]
2017-07-03T12:48:00.595 DEBUG Idle pool thread [email protected]/[email protected]/PRODUCING/0/1 produce exit
2017-07-03T12:48:00.595 DEBUG Idle pool thread ran [email protected]/[email protected]/PRODUCING/0/1
2017-07-03T12:48:00.595 DEBUG Idle pool thread run [email protected]/[email protected]/PRODUCING/0/1
2017-07-03T12:48:00.595 DEBUG Idle pool thread [email protected]/[email protected]/PRODUCING/0/1 run
2017-07-03T12:48:00.597 DEBUG Idle pool thread 127.0.0.1 has disconnected !
2017-07-03T12:48:00.597 DEBUG Idle pool thread Disconnected: 127.0.0.1 (127.0.0.1) (statusCode= 1,000 , reason=null)
你可以發表你的日誌?如果一個套接字被另一端關閉,你通常會遇到某種錯誤。保持活動設置也可能會影響 – ApriOri
我將編輯註釋以在客戶端和服務器端添加日誌。 但是我沒有在策略中找到任何keepalive參數。 這是Jetty Websocket API中的一件事情嗎? – Youri