Я читал javadocs Apache и пришел к выводу, что правильный способ работы с многопоточным приложением, использующим HttpClient, состоит в использовании статического синглтона MultiThreadedHttpConnectionManager
с глобальным HttpClient, причем каждый поток имеет свой экземпляр HttpState для его куки и HostConfiguration. Это правильно? Очевидно, что я хочу, чтобы каждый поток не мешал другим.
Кроме того, одна из проблем, которые я заметил, заключается в том, что когда эти потоки заканчивают работу, сокет, связанный с HttpClient, остается (проверка / proc / ### / fd) даже после вызова RequestMethod.releaseConnection()
в блоке finally , Это проблема, поскольку предел по умолчанию для fd составляет 1024, и он будет нарушен через несколько дней. Какой лучший способ убить с этими оставшимися сокетами?
Единственный применимый способ уничтожения этих сокетов, который я вижу, это MultiThreadedHttpConnectionManager.closeIdleConnections(timeout)
- это правильно?
Это означает, что мне придется либо создавать экземпляр другого потока, чтобы периодически вызывать этот метод, либо просто вызывать его каждый раз, когда потоки уничтожаются вручную, что выглядит довольно неуклюже. Любой совет?
Большое спасибо