2012-02-22 30 views
6

Tôi đang chuyển đổi ứng dụng của mình để sử dụng HTTPS và muốn tránh chi phí bắt tay càng nhiều càng tốt bằng cách duy trì mở kết nối lâu.NSURLConnection bỏ qua thời gian chờ Keep-Alive?

Từ đọc web và các câu trả lời khác trên ngăn xếp tràn nó xuất hiện NSURLConnection nên minh bạch giữ cho ổ cắm nằm bên dưới mở nếu máy chủ phản hồi với Connection: keep-alive và Keep-Alive: timeout = N.

Tuy nhiên, tôi thấy rằng các kết nối của tôi chỉ được giữ trong khoảng 10 giây. Phản hồi Keep-Alive của tôi được đặt nhiều hơn thế này. Tôi cũng đang gửi kết nối: giữ nguyên trong tiêu đề yêu cầu của tôi.

Có ai có thể làm sáng tỏ điều này không? Tôi thực sự không muốn phải sử dụng CFNetwork để đạt được điều này.

Trả lời

2

Bạn có hai cách:

Như Tyler nói trong câu trả lời của ông here:

Bạn có thể chỉ định một thời gian chờ trong đối tượng NSURLRequest của bạn. Một cách để thực hiện việc này là xây dựng nó theo phương thức requestWithURL:cachePolicy:timeoutInterval:. (Bạn có thể chuyển vào tham số mặc định NSURLRequestUseProtocolCachePolicy cachePolicy nếu bạn không muốn lo lắng về phần đó.) Thời gian chờ là giá trị dấu chấm động trong vài giây, về cơ bản là mọi khoảng thời gian trong SDK iPhone.

Cũng đảm bảo đại biểu của NSURLConnection được đặt và phản hồi theo phương pháp connection:didFailWithError:. Kết nối luôn gọi phương thức này hoặc connectionDidFinishLoading: khi hoàn thành kết nối.

Hoặc làm những gì Kris gợi ý trong câu trả lời của ông here:

ASIHTTPRequest có một phương pháp expirePersistentConnections. Nó có thể làm những gì bạn đang tìm kiếm.

Nó không phải là một thay thế thả cho NSURLConnection, nhưng nó không quá khó để mã cổng từ NSURLConnection để ASIHTTPRequest.

+2

Vui lòng không sao chép các từ của người khác mà không có phân bổ phù hợp. Tôi đã chỉnh sửa ở trên để làm như vậy, nhưng hãy chắc chắn rằng bạn làm điều này trong tương lai. –

0

Sự cố 10s đã được khắc phục trong iOS7. Tôi đã gặp vấn đề tương tự và đang theo dõi lỗi. Nó đã được sửa trong iOS 6 điểm một số phiên bản.

+1

iOS 9.2.1: Không cố định. http://stackoverflow.com/questions/25372318/error-domain-nsurlerrordomain-code-1005-the-network-connection-was-lost/25996971#25996971 – jcady

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