2012-01-24 50 views

Trả lời

4

Nếu bạn không quan tâm đến việc đọc các phản ứng ở tất cả bạn chỉ có thể sử dụng để URL.openStream() tạo một kết nối và sau đó ngay lập tức đóng socket (hoặc bỏ qua nó và để cho nó thời gian ra, nếu bạn cảm thấy như là có nghĩa là đến máy chủ). Điều này không hoàn toàn không đồng bộ, nhưng nó sẽ nhanh hơn một chút so với bất kỳ phương pháp nào dựa vào việc tìm nạp và phân tích cú pháp phản hồi của máy chủ.

Điều này tất nhiên có thể được thực hiện không đồng bộ bằng cách giảm các cuộc gọi openStream() đến một chuỗi khác theo cách thủ công hoặc bằng cách sử dụng các tiện ích có sẵn trong java.util.concurrent.

+0

URL.openConnection() không gửi yêu cầu HTTP đến máy chủ.đây là mã ** URL url = new URL ("http: // localhost /"); URLConnection myURLConnection = url.openConnection(); myURLConnection.connect(); ** và tôi đã thấy nhật ký truy cập apache và nó không nhận được yêu cầu. – pavan

+2

@pavan - Ah, lỗi của tôi, API để sử dụng thực sự là 'openStream()', không phải 'openConnection()'. 'openConnection()' chuẩn bị một đối tượng kết nối, nhưng không thực sự thiết lập kết nối đến máy chủ. 'openStream()' thiết lập kết nối và trả về 'InputStream' liên kết với nó, sau đó bạn được tự do đọc hoặc đóng hoặc bỏ qua. Tôi sẽ chỉnh sửa câu trả lời của tôi cho phù hợp. – aroth

2

java.util.concurrent có thể được sử dụng.

Nếu bạn quan tâm là sử dụng thư viện của bên thứ ba sau đó bạn có thể muốn có một cái nhìn tại

Async Http Client

+0

thực sự ...! Cảm ơn @Sandeep Pathak! : D – gumuruh

0

Tôi khuyên bạn nên sử dụng một cái gì đó như Jetty HttpClient nếu bạn không nhớ thêm các thư viện Jetty vào ứng dụng của mình. Đây là một ví dụ điển hình từ trang wiki của Jetty http://wiki.eclipse.org/Jetty/Tutorial/HttpClient.

+0

từ tài liệu tại liên kết ở trên: "phương thức send() trả về ngay lập tức sau khi gửi trao đổi đến một nhóm luồng để thực thi" - vì vậy, không thực sự không đồng bộ. – kellogs

Các vấn đề liên quan