Các câu trả lời khác dường như không giải quyết được tại sao lại close()
thực sự cần thiết? * 2
Nghi ngờ về câu trả lời "Phân bổ tài nguyên HttpClient".
Nó được đề cập trong tài liệu httpcomponents 3.x cũ , lâu đời và có nhiều khác biệt với 4.x HC. Bên cạnh đó, lời giải thích quá ngắn gọn không cho biết tài nguyên cơ bản này là gì.
Tôi đã thực hiện một số nghiên cứu về mã nguồn phát hành 4.5.2, nhận thấy việc triển khai về CloseableHttpClient:close()
cơ bản chỉ đóng trình quản lý kết nối của nó.
(FYI) Đó là lý do tại sao khi bạn sử dụng ứng dụng khách dùng chung PoolingClientConnectionManager
và gọi close()
, ngoại lệ java.lang.IllegalStateException: Connection pool shut down
sẽ xảy ra. Để tránh, setConnectionManagerShared
hoạt động.
Tôi không muốn làm CloseableHttpClient:close()
sau mỗi yêu cầu
Tôi đã từng tạo một phiên bản máy khách http mới khi thực hiện yêu cầu và cuối cùng đóng nó. Trong trường hợp này, tốt hơn là không nên gọi close()
. Vì nếu trình quản lý kết nối không có cờ "shared", nó sẽ bị tắt, quá đắt cho một yêu cầu.
Trên thực tế, tôi cũng tìm thấy trong thư viện clj-http , một trình bao bọc Clojure trên Apache HC 4.5, hoàn toàn không gọi close()
. Xem func request
trong tệp core.clj