iOS - zufällig "Verbindung zum Host nicht möglich" mit 3G

8

Ich arbeite an einer iOS-Anwendung, die als Thin Client für einen Business Server arbeitet. Es werden viele Anfragen an den Server gesendet, viele Daten werden heruntergeladen.

Ich verwende keine speziellen Anfrage-Frameworks, nur asynchrone NSURLConnection mit einem Delegaten.

Die Anwendung funktioniert normalerweise sehr gut mit WLAN und 3G ABER

Einige Benutzer melden zufällige Verbindungsunterbrechungen bei Verwendung von 3G (in USA). Alle Anfragen sind okey, aber ab und zu scheitert eine Anfrage mit "Kann nicht mit Host verbinden" (-1004) Fehler.

Dies beeinflusst die Benutzererfahrung sehr.

Einige Fakten:

  1. Es passiert nicht über WLAN
  2. Benutzer berichten, dass dies bei der Verwendung von 3G nicht mit anderen Anwendungen geschieht.
  3. Es handelt sich nicht um ein Timeout-Problem. Der Fehler tritt nach dem Starten der Verbindung 0,3-1,0 Sekunden auf.
  4. Wir konnten das Problem mit traceroute nicht reproduzieren.
  5. Mit SCNetworkReachability scheint der Host erreichbar zu sein (ich kenne die Einschränkungen dieser API).

Frage Was könnte die Ursache des Problems sein? Welche Verbindungseigenschaften können bei 3G und WLAN abweichen? Wie kann ich es debuggen?

Zurzeit ist die einzige Lösung, die ich sehe, zu versuchen, die Anfrage erneut zu senden, wenn die vorherige Anfrage fehlgeschlagen ist. Ich möchte jedoch zuerst die Ursache des Problems finden.

BEARBEITEN Das Problem wurde wahrscheinlich von einem unserer Router verursacht. IT-Leute untersuchen immer noch das Problem.

    
Sulthan 31.07.2012, 20:22
quelle

3 Antworten

3

Alle Fehlercodes finden Sie in der Apple-Dokumentation unter dem Abschnitt

CFNetwork-Fehlercodes

Der Code -1004 wird nur als

beschrieben
  

kCFURLErrorCannotConnectToHost

     

Die Verbindung ist fehlgeschlagen, weil a   Verbindung kann nicht zum Host hergestellt werden. Verfügbar in OS X v10.6 und   später. In CFNetworkErrors.h deklariert.

Das bedeutet im Grunde, dass der Benutzer eine Verbindung hat (er ist nicht im Flugmodus, der Datenverkehr ist eingeschaltet und sein Telefon ist im Netzwerk registriert, Sie hatten eine gültige URL usw.), wurde aber aktiv von verbannt zum Server . Wenn der Server nicht reagiert, hätten Sie nach einer längeren Wartezeit, wie Sie beschrieben haben, etwas mehr wie einen Timeout-Fehler gehabt. Diese Art von Fehler wird wahrscheinlich durch etwas verursacht, das den Datenverkehr zum Server verhindert und beispielsweise auftreten kann, wenn sich der Benutzer hinter einer Firewall oder einem Proxy befindet.

Das Problem könnte tatsächlich vom Anbieter verursacht werden, vor allem, wenn Sie bei einigen Benutzern keine Probleme haben und zufällige Probleme mit anderen auftreten.

Wie auf einem anderen Poster gesagt wurde, könnten Sie versuchen, Ihre Benutzer nach ihrem Dienstanbieter zu fragen, und nach weiteren Einzelheiten zu ihrem Standort oder dem, was sie taten, als sie den Fehler bekamen (wie in einem Fahrzeug sitzen oder schlechten Empfang) Landschaft)

Wenn Sie keine Muster finden können, und wenn der Fehler wirklich zufällig und nur für einige Benutzer auftritt, und nur manchmal, würde ich es einfach als ein weiteres unausweichliches Problem ansehen, das durch die Tatsache verursacht werden kann, dass Mobiltelefone sind niemals garantiert ständig verbunden , und einige Mobilfunkanbieter liefern möglicherweise nicht immer 100% aller Pakete, die dort geliefert werden sollten ... was Sie tun müssen, ist nur zu handhaben der Fehler.

Entfernen Sie den Fehler, indem Sie ihn einfach wiederholen und dem Benutzer nicht zeigen, zumindest nicht nach einer ausreichenden Anzahl von Wiederholungen.

Eine letzte Sache zu beachten:

Wenn Sie viele und viele Anfragen von Ihrer App und viele Daten senden, stellen Sie sicher, dass Sie nicht übermäßig konsumieren, indem Sie große Mengen nicht bearbeiteter Anfragen verschicken. Dies könnte dazu führen, dass der Server oder ein Proxy-Server auf dem Weg Ihre Anfrage ablehnt, weil er zu sehr damit beschäftigt ist, Ihre andere Anfrage zu beantworten. Eine abgewiesene Anfrage könnte einen solchen Fehler verursachen. Stellen Sie sicher, dass Sie eine angemessene Anzahl von Anfragen senden, damit das Gerät Ihres Benutzers Zeit zum "Atmen" hat.

Lassen Sie Ihr Wiederholungsschema zu einem schlauen Programm werden, bei dem Sie mehrere Male innerhalb kürzerer Zeit erneut versuchen, und wenn es weiterhin fehlschlägt, erhöhen Sie die Zeitspanne bis zur nächsten Wiederholung.

    
jake_hetfield 03.08.2012, 14:25
quelle
3

Ich würde die Annahme wiederholen, dass es nur Ihre Anwendung betrifft. Es gibt viele Möglichkeiten, wie Benutzer Probleme mit Ihrer Anwendung sehen können, selbst wenn das Problem mit ihrer Internetverbindung zusammenhängt. Zum Beispiel versuchen vielleicht die anderen Anwendungen transparent - Benutzer würden einfach langsamere Aktualisierungsgeschwindigkeiten sehen. Oder vielleicht gefallene Verbindungen sind für die anderen Anwendungen einfach egal.

Haben Sie die betroffenen Benutzer gefragt, welchen Provider sie verwenden? Wenn alle dasselbe Mobilfunknetz verwenden, deutet dies darauf hin, dass es sich um ein Problem mit dem Netzwerk und nicht um Ihre Anwendung handelt.

    
Jim 03.08.2012 14:00
quelle
2

Es scheint mir, dass der Grund dafür einfach in der Art der Mobilfunkdaten und des Internetzugangs liegt. Wie Sie vielleicht wissen, wenn Sie eine Mobilfunkverbindung benutzen, wird die Verbindung manchmal - besonders wenn Sie umziehen - das Netzwerk wechseln, wenn Sendetürme geändert werden.

Sie erwähnen, dass Sie eine Menge Daten herunterladen und in kurzen Abständen, würde ich davon ausgehen, dass Ihre Anwendung anfälliger für dieses Problem macht, und ich würde nicht für eine Sekunde akzeptieren, dass dies nicht für andere Anwendungen passieren würde - Es geht um Timing.

    
Daniel 03.08.2012 14:06
quelle

Tags und Links