كيف تجبر الانفصال في العموم HTTPClient؟
-
25-09-2019 - |
سؤال
يمكنني استخدام Commons-HTTPClient لإرسال استعلامات إلى خادم ويب. لا يقوم خادم الويب بإغلاق الاتصالات أبدًا ، ولكن لديه تسرب ذاكرة صغير مرتبط بسياق الاتصال.
لذلك أود إغلاق الاتصالات المستمرة من وقت لآخر (كل استفسارات X على سبيل المثال) ، لكنني لم أجد أي طريقة للقيام بذلك. يمكنني استخدام multitherdedHttpConnectionManager
يمكنني استخدام multithervedhedhttpconnectionmanager.closeidleConnections (hea_small_delay) ، لكن هذا غير موثوق للغاية: إذا كان رمز Java الخاص بي لديه الكثير من العمل ، فمن الممكن عدم وجود اتصال على الإطلاق في الخمول ، لأنه يوجد دائمًا مؤشرات ترابط أخرى في انتظار اتصال مجاني.
شكرًا،
المحلول
بعد تنفيذ طريقة واحدة ، دعنا نقول ، يمكنك قراءة رقم HTTPStatus المستجيب ، لتحديد ما إذا كان هناك حاجة إلى استدعاء طريقة.
أو إذا كنت تعرف أي اتصال تريد إغلاقه ، فيمكنك المحاولة
MultiThreadedHTTPConnectionManager
void releaseConnection(HttpConnection conn)
حسنًا ، اعتقدت أن لديك سببًا تريد "قتل" اتصال. افترض أن لديك الاتصال ، كائن HTTPConnection ، الذي تريد إغلاقه في متناول اليد. قد تساعد هذه الطريقة؟
HttpConnection
public void close()
Closes the socket and streams.
نصائح أخرى
هل تتصل method.releaseConnection()
?
http://hc.apache.org/httpclient-3.x/throading.html#connection_release
هل يمكنك تحمل استخدام SimpleHttpConnectionManager(boolean alwaysClose)
?
httpClient.setHttpConnectionManager(new SimpleHttpConnectionManager(true))
عندما أستخدم releaseConnections()
لا يزال هناك اتصالات في CLOSE_WAIT
دولة. هل لا بأس إذا أضفت closeIdleConnections(0)
بعد releaseConnections
?
هل يعني هذا حتى إذا تم إرسال الاتصال إلى التجمع لاستخدامه من قبل العملاء الآخرين ولكن لم يتم إغلاقه/إطلاقه بعد ذلك closeIdleConnections
سوف يغلقه؟