2014-05-13 11 views
5

मैं एक वेबसाईट क्लाइंट/सर्वर स्थापित करने की कोशिश कर रहा हूं। समस्या, सत्र जहां के बाद लगभग 30 ~ डेटा का अंतरण की 60 के दशक, ग्राहक कनेक्शन बंद कर देता है में निष्क्रियता के कारण पैदा होती है अपवाद के साथ:जेटी websocket रीड टाइमआउट

org.eclipse.jetty.websocket.api.WebSocketTimeoutException: Timeout on Read 
at org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.onReadTimeout(AbstractWebSocketConnection.java:505) 
at org.eclipse.jetty.io.AbstractConnection.onFillInterestedFailed(AbstractConnection.java:258) 
at org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.onFillInterestedFailed(AbstractWebSocketConnection.java:481) 
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.failed(AbstractConnection.java:415) 
at org.eclipse.jetty.io.FillInterest.onFail(FillInterest.java:100) 
at org.eclipse.jetty.io.AbstractEndPoint.onIdleExpired(AbstractEndPoint.java:146) 
at org.eclipse.jetty.io.IdleTimeout.checkIdleTimeout(IdleTimeout.java:153) 
at org.eclipse.jetty.io.IdleTimeout$1.run(IdleTimeout.java:50) 
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) 
at java.util.concurrent.FutureTask.run(FutureTask.java:166) 
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:178) 
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:292) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:722) 

ES: सॉकेट बंद: [1001] निष्क्रिय टाइमआउट

यह कोई मतलब नहीं के बाद से मैं ग्राहक और बहुत बड़ा मूल्यों के maxIdleTimeout स्थापित करने के लिए सर्वर साइड पर दोनों की कोशिश की है बनाता है, और के बाद भी सत्र शुरू हो रहा है, मैं इसे की जाँच करें:

client.setMaxIdleTimeout(0); 

मैं मैंने इसके बजाय अलग-अलग मूल्यों का प्रयास किया है "0" उपरोक्त कोई फायदा नहीं हुआ।

उत्तर

2

यह समस्या 2 साल पुरानी है लेकिन अभी भी मौजूद है।

WebSocketContainer container = ContainerProvider.getWebSocketContainer(); 
Session session = container.connectToServer(this, endpointURI); 
session.setMaxIdleTimeout(0); 
: इसके पीछे कारण जेट्टी डिफ़ॉल्ट WebSocket टाइमआउट, 5 मिनट ( org.eclipse.jetty.websocket.api.WebSocketPolicy देखें) है, जबकि बिलाव पर, 0.

इसे ठीक करने के है अपने WebSocket ग्राहक कोड में आप इन पंक्तियों के साथ कुछ कर सकते हैं है

  • जेटी 9.3.9.v20160517 और टॉमकैट 8+ के साथ परीक्षण किया गया - यह मुद्दा जेटी में दिखाई देना बंद कर दिया, जबकि टॉमकैट वही व्यवहार करता था।

हालांकि, यह @OnError को लागू करने और session.close() करते हैं और फिर से कनेक्ट कनेक्शन स्थिर रखने के लिए एक अच्छा विचार हो सकता है। इसके अलावा, जेटी का WebSocketTimeoutException रनटाइम अपवाद से लिया गया है, आप थ्रोबल के उदाहरण की जांच कर सकते हैं और केवल रनटाइम अपवादों पर पुनः कनेक्ट कर सकते हैं। और सर्वर की तरह स्थितियों के लिए "असली" त्रुटि प्रसंस्करण डाउन इत्यादि है IOException प्रसंस्करण में container.connectToServer()