2011-11-14 8 views
5

Tôi có một nút tìm kiếm truy cập vào máy chủ mỗi khi tôi nhấn nó. Vấn đề là nếu tôi nhấn nó nhiều lần liên tiếp, nó sẽ hoạt động tốt. Tuy nhiên, nếu tôi đợi 5 giây, báo chí đầu tiên sẽ không hoạt động. Nó chỉ không nhận được phản hồi. Nhấn lần thứ hai sẽ hoạt động và nút tiếp theo sẽ nhấn cho đến khi tôi chờ một khoảng thời gian nhất định (~ 5 giây)Giải pháp keepalive Android http, nhưng nó có phải là giải pháp vĩnh viễn không?

Vì vậy, về cơ bản, trừ khi bạn liên tục tìm kiếm những thứ mới trong vòng 5 giây, nhấn nút đầu tiên của bạn không làm gì cả.

này được giải quyết với các

  System.setProperty("http.keepAlive", "false"); 

Tuy nhiên, tôi đã đọc rằng đây được thoát khỏi kết nối liên tục mà một kết nối TCP mới phải được thực hiện mỗi khi tôi nhấp vào nút đó. Đây là chậm hơn nhưng nó không phải là lỗi.

Đây có phải là bản sửa lỗi không tốt? Tôi đã đọc rằng điều này không thực sự sửa chữa bất cứ điều gì. Sẽ yêu một số trợ giúp, cảm ơn.

+0

Tôi đang gặp vấn đề tương tự, nhưng tôi không nhận được nơi tôi nên thêm dòng này? Tôi có nghĩa là trước khi kết nối, trước khi đọc phản ứng ..? Xin giúp đỡ – AndroidGuy

+0

xin lỗi, tôi không nhớ chút nào. tôi đã hỏi những năm trước và chưa thực hiện phát triển Android kể từ đó. chỉ cần chơi xung quanh với nó – volk

Trả lời

4

Bạn nói:

Tuy nhiên, nếu tôi chờ 5 giây, báo chí đầu tiên sẽ không hoạt động. Nó chỉ không nhận được phản hồi.

Tôi nghĩ rằng máy chủ thậm chí không nhận được yêu cầu trong trường hợp của bạn. Tôi nghĩ rằng việc đặt http.keepAlive thành false là một sửa chữa tốt. Tôi đã dành một lượng thời gian hợp lý để điều tra vấn đề này và rõ ràng đây là lỗi trong thư viện Android.

Lý do là máy chủ không muốn giữ tất cả các kết nối đó mở do số lượng lớn các kết nối đó, do đó máy chủ sẽ đóng một số kết nối theo thời gian. Tuy nhiên, nhóm kết nối được sử dụng trong thư viện Android không muốn chấp nhận sự kiện này và cố gắng sử dụng kết nối cũ đã đóng.

Bỏ đặt http.keepAlive là giải pháp thay vì giải pháp, tuy nhiên bạn nhận được xử lý HTTP đáng tin cậy, mặc dù với một số chi phí hiệu suất.

+0

cảm ơn. điều này là từ một thời gian dài trước đây, p – volk

+0

Có lẽ bạn đã tìm thấy một giải pháp tốt hơn kể từ đó? –

+0

tôi nhớ chỉ cần đi với sửa chữa mà tôi đã viết trong câu hỏi của tôi, và đã không thực sự làm việc với Android trong một thời gian, p xin lỗi – volk

0

Một ClientConnectionManager quản lý nội bộ các kết nối được vận hành, nhưng đưa ra các phiên bản của ManagedClientConnection. Giao diện này tóm tắt từ các hoạt động ổ cắm cơ bản và cung cấp các phương thức thuận tiện để mở và cập nhật các ổ cắm để thiết lập một tuyến đường. Toán tử được đóng gói bởi trình quản lý kết nối và được gọi tự động.

org.apache.http.conn

+0

cảm ơn câu trả lời của bạn, tuy nhiên, tôi không chắc chắn cho dù điều này trả lời câu hỏi của tôi – volk