प्राप्त करने के बाद टीसीपी कनेक्शन क्यों बंद नहीं हुआ है हम अपाचे कैमल को ऑर्केस्ट्रेशन इंजन के रूप में उपयोग कर रहे हैं। आमतौर पर, इस परिदृश्य पर:अपाचे कैमल: 200 ओके
ग्राहक भेजता HTTP अनुरोध < -> केमल कोड < -> बाहरी सर्वर (रों)
गेंद रोल करने के लिए जब हमारे ग्राहक हमारे केमल कोड को HTTP अनुरोध भेजता है शुरू होता है। ऊंट कोड बाहरी सर्वरों को आरईएसटी HTTP कॉल के माध्यम से ट्रिगर करेगा। आखिरकार, ऊंट कोड ग्राहक को एक उत्तर वापस भेज देगा।
क्लाइंट को प्रतिक्रिया भेजने से पहले अंतिम कार्रवाई, ऊंट कोड बाहरी सर्वर की ओर HTTP प्राप्त करता है। तो पहले एक टीसीपी कनेक्शन सेटअप किया जाता है, फिर डेटा भेजा जाता है। कुछ समय बाद (इसमें 5 से 10 सेकंड लग सकते हैं), बाहरी सर्वर 200 ओके के साथ जवाब देता है।
समस्या: 200 ओके प्राप्त करने के बाद ऊंट बाहरी सर्वर पर एक टीसीपी फिन भेजता नहीं है। नतीजतन, टीसीपी कनेक्शन खुला रहता है ... (बाहरी सर्वर फिर 200 सेकंड के टाइमआउट के बाद टीसीपी कनेक्शन को बंद कर देता है, लेकिन इसका मतलब है कि 200 सेकंड के दौरान एक टीसीपी संसाधन खो गया)।
तो, टीसीपी स्तर पर, यह इस प्रकार है: बाहरी सर्वर
कैमल < ---------->
TCP SYN -->
<-- TCP SYN,ACK
TCP ACK -->
HTTP GET -->
<-- 200 OK
TCP ACK -->
<200 seconds later>
<-- TCP FIN,ACK
TCP ACK -->
किसी भी विचार कैसे मैं ऊंट बंद हो सकता है 200 ओके प्राप्त करने के बाद टीसीपी कनेक्शन?
नोट: मैंने "कनेक्शन: क्लोज़" हेडर जोड़ने की कोशिश की, लेकिन ऊंट ने हेडर नहीं जोड़ा?
exchange.getOut().setHeader("Connection","Close");
मैं ग्रहण आईडीई के साथ एक स्प्रिंग ढांचे में कैमल 2.9.1 का उपयोग कर रहा: यह इसे अनदेखा करने के लिए ...
इस शीर्ष लेख जोड़ने के लिए कोड था लग रहा था।
आप कौन से ऊंट http घटक का उपयोग करते हैं? –
हाय, मैं ऊंट 2.9.2 का उपयोग कर रहा (नहीं 2.9.1 के रूप में मैं पहले ही उल्लेख किया :() और ऊंट-http-2.9.2.jar (और कॉमन्स-httpclient-3.1.jar)। – opstalj
आप के साथ इस व्यवहार को पुनः कर सकते हैं किसी भी HTTP सर्वर? या ग्राहक के सर्वर केवल एक ही है कि कनेक्शन? –