2016-08-07 34 views
6

Ich verwende NSURLSession für das Netzwerk. Das Testen in Charlesproxy mit Verbindungsabbruch zeigt, dass tatsächlich drei Anforderungen statt einer gesendet werden.Wie konfiguriert man die Wiederholungsversuche der NSURLSession-Anfrage beim Verbindungsabbau?

Es sieht aus wie eine Art von NSURLSession Low-Level-Arbeit - wenn es Verbindungsabbruch bestimmt, wird es tatsächlich mehrere weitere Anfragen senden, bevor Sie entscheiden, gibt es wirklich kein Netzwerk und Delegate/Block mit Fehler aufrufen.

Nur um meine Annahmen zu beweisen, änderte ich NSURLSessionConfiguration von defaultSessionConfiguration in backgroundSessionConfigurationWithIdentifier und es begann mehr Anfragen (4) vor dem Aufruf von Delegate/Block zu senden.

Dies ist meiner Meinung nach kein Problem, ich frage mich nur, ob es irgendwie konfiguriert werden kann.

+0

Sind Sie sicher, dass dieselbe Anfrage erneut gesendet wird und beispielsweise nicht auf Authentifizierungsanforderungen und/oder nachfolgende Weiterleitungen reagiert wird? AFAIK, nur Sitzung Aufgaben im Hintergrund 'NSURLSession' wird automatisch erneut versuchen, wenn die Verbindung nicht hergestellt wird. – Rob

+0

es passiert nicht, wenn keine Verbindung hergestellt wird, aber wenn es fallengelassen wird, meine ich keine Antwort mit 3xx/4xx/5xx, sondern expliziten Verbindungsabbau. Die Konfiguration, die ich erstelle, ist Standard und kein Hintergrund. – Nikita

+0

Wie löschen Sie die Anfrage explizit? – Wain

Antwort

1

Ich denke, was Sie sehen, sind Artefakte der Art, wie NSURLSession funktioniert. Es:

  • Gleichzeitig macht IPv4 und IPv6-Verbindungen zum Host.
  • Verwendet die erste Verbindung, die erfolgreich geöffnet wird, und schließt die andere Verbindung sofort.
  • Bei einem Fehlschlag teilt Erreichbarkeit mit, ob er andere Server (z. B. apple.com) erreichen kann, um festzustellen, welcher Fehlercode zurückgesendet werden soll.

AFAIK, nichts davon ist konfigurierbar, AFAIK.

+0

Ich sehe mehrere Anfragen nur in einem Fall - wenn die Verbindung gelöscht wird (explizit). In allen anderen Fällen gibt es immer eine Anfrage. Darüber hinaus sind alle drei Anfragen absolut identisch und gehen auf die ipv4-Adresse. Also ich denke nicht, dass das der Fall ist. – Nikita

+0

Das ist sehr merkwürdig. Sind Sie sicher, dass in der Sitzung nicht eine Reihe von eingereihten Anforderungen wartet, die von der maximalen Anzahl gleichzeitig ablaufender Anforderungen überwacht werden? – dgatwood