سؤال

يمكنني استخدام 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. 

نصائح أخرى

هل يمكنك تحمل استخدام SimpleHttpConnectionManager(boolean alwaysClose)?

httpClient.setHttpConnectionManager(new SimpleHttpConnectionManager(true))

عندما أستخدم releaseConnections() لا يزال هناك اتصالات في CLOSE_WAIT دولة. هل لا بأس إذا أضفت closeIdleConnections(0) بعد releaseConnections?

هل يعني هذا حتى إذا تم إرسال الاتصال إلى التجمع لاستخدامه من قبل العملاء الآخرين ولكن لم يتم إغلاقه/إطلاقه بعد ذلك closeIdleConnections سوف يغلقه؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top