2016-08-07 4 views
6

네트워킹에 NSURLSession을 사용하고 있습니다. Charlesproxy에서 연결을 테스트하는 것은 실제로 하나의 요청 대신 3 개의 요청이 전송된다는 것을 보여줍니다.연결 삭제시 NSURLSession 요청의 재시도 시도를 구성하는 방법은 무엇입니까?

일종의 NSURLSession 저수준 작업 인 것처럼 보입니다. 연결이 끊어지면 실제 몇 가지 요청이 전송되어 실제로 네트워크가없고 대리인/차단 블록이 실패한 것으로 판단됩니다.

내 가정을 증명하기 위해 defaultSessionConfiguration에서 backgroundSessionConfigurationWithIdentifier로 NSURLSessionConfiguration을 변경했으며 대리인/블록을 호출하기 전에 더 많은 요청 (4)을 보내기 시작했습니다.

내 의견으로는 이것은 다소 문제가되지 않으며 어떻게 든 구성 할 수 있습니다.

+0

동일한 요청을 다시 보내고 있습니까? 예를 들어 인증 요청에 응답하거나 리디렉션을 따르는 경우가 아닙니까? AFAIK, 연결이 설정되지 않으면 백그라운드 NSURLSession에 대한 세션 작업 만 자동으로 다시 시도됩니다. – Rob

+0

연결이 설정되지 않았을 때가 아니라 연결이 끊어 질 때 3xx/4xx/5xx로 응답이 아니라 명시 적 연결이 끊어지는 것을 의미합니다. 내가 만들고있는 구성은 기본값이 아니라 배경입니다. – Nikita

+0

요청을 명시 적으로 삭제하는 방법은 무엇입니까? – Wain

답변

1

내가보기에 NSURLSession이 작동하는 방식의 인공물이라고 생각합니다. 그것은 :

  • 동시에 호스트에 IPv4와 IPv6를 연결합니다.
  • 첫 번째 연결을 성공적으로 열어 다른 연결을 즉시 닫습니다.
  • 오류가 발생하면 도달 가능성을 알리고 다른 서버 (예 : apple.com)에 연락하여 다시 보낼 오류 코드를 결정합니다.

AFAIK, 그 중 누구도 구성 가능하지 않습니다. AFAIK.

+0

연결이 끊어 지거나 (명시 적으로) 한 경우에만 여러 요청이 표시됩니다. 다른 모든 경우에는 항상 하나의 요청이 있습니다. 또한 세 가지 요청은 모두 동일하며 ipv4 주소로 이동합니다. 그래서 나는 이것이 사실이라고 생각하지 않는다. – Nikita

+0

매우 이상합니다. 최대 동시 요청 수에 따라 세션에서 대기중인 대기 요청이 많지 않습니까? – dgatwood