2016-08-02 5 views
-1

Ich habe eine mobile App, die jede Sekunde, Breite, Länge, Geschwindigkeit ... und so weiter abruft.Best Practice für die Behandlung von Datenverbindungsunterbrechung beim Senden von Daten jede Sekunde

Diese Anwendung speichert diese Werte in einer CSV-Datei und sendet sie auch an einen Remote-Server (formatieren sie mit JSON), mithilfe von DATA-Verbindung. Der Server (Apache, MySQL) ruft die Daten ab und legt sie in einer Datenbank ab. Dann kann der Benutzer auf der Website eine Verbindung herstellen und zum Beispiel eine Spur mit GM erzeugen oder Statistiken erzeugen (Durchschnittsgeschwindigkeit ...).

Aber manchmal, wegen der Landschaft (Berge), schlägt die Datenverbindung fehl. Selbst wenn das mobile Gerät weiterhin Daten speichert, empfängt der Server keine Daten mehr.

Wenn die Datenverbindung wieder funktioniert, erhält der Server die letzte Position. Es gibt also eine Lücke zwischen diesen beiden Positionen.

Was ist der beste Weg, die richtigen Daten zu senden, um diese Lücke zu füllen?

  • auf App-Seite, immer testen, ob Daten verloren gehen, und wenn es so ist, speichern Sie es in einer separaten CSV-Datei?
  • dann senden Sie diese CSV?
  • oder senden Sie ein JSON-Array?
  • +0

    Das Format, in dem Sie Daten zwischen Ihrer App und Ihrem Server senden, liegt ganz bei Ihnen und wird in der Regel von Ihnen festgelegt. CSV ist im allgemeinen Fall für dieses Problem weder besser noch schlechter als JSON, und daher gibt es keine objektiv "richtige" Antwort auf Ihre Frage. Abstimmung als "primär meinungsbezogen" zu schließen. – eggyal

    Antwort

    1

    Mit einer App die gleiche Sache (außer ich benutze eine db nicht eine csv), empfehle ich Ihnen, die Daten im Paket zu senden. Wenn Sie die Daten jede Sekunde senden, wird der Akku leer. Ich sende Daten jede Minute oder mehr abhängig von den Bedürfnissen.

    Für Ihre Frage, bei jedem Aufruf (HTTP POST), ich ein JSONArray mit jeder Position zu senden. Ich markiere die Daten in der Datenbank mit einem Status, um zu wissen, welcher korrekt gesendet wurde (0 = nicht gesendet, 1 = gesendet). Der Status hängt natürlich vom StatusCode der Anfrage ab.

    Die Datenbank ist live aus dem Dienst hört die GPS-Tracker bevölkern in, mit dem Status 0.

    Beim nächsten Aufruf, werde ich alle nicht sended Daten auswählen. Ich bevorzuge es, ein JSON-Format zu verwenden, da mein Server weiß, wie man es liest, aber das ist mehr eine Wahl als eine Priorität.

    0

    Ich denke, es gibt keine "allgemeine" Lösung für diese Situation, die meisten Male müssen Sie die beste Lösung für Sie finden, aber was ich tun würde, ist das Folgende, abhängig von der serverseitigen Implementierung:

    1. ein Objekt erstellen, die alle Informationen speichern, beispielsweise eine Reihe von „Positionen“, die lokal in einem json serialisiert und gespeichert werden können.

    2. Bevor Sie eine Anforderung auslösen, aktualisieren Sie das Objekt, das die Daten speichert und speichert.

    3. Wen Sie die Anfrage auslösen, verwenden Sie Ihr benutzerdefiniertes Objekt als "Daten" für Ihren Server.

    4. Wenn die Anforderung erfolgreich ist, löschen Sie alle gespeicherten Daten (sie wurde bereits gesendet).

    5. Wenn die Anforderung fehlgeschlagen ist, nichts tun ... die Daten werden beim nächsten Mal gesendet.

    Wenn Sie genauer sein wollen, können Sie die Ursache des Anforderungsfehler überprüfen konnte und es ist kein Timeout bei und es ist ein Server-Problem, können Sie den Datensatz als fehlerhaft markiert und einen Zähler verwenden, um Führen Sie eine maximale Wiederholung für die fehlgeschlagenen Daten durch. Wenn die maximale Anzahl der Wiederholungen erreicht ist, löschen Sie die fehlerhaften Daten. Dies könnte ein Fehler in der Datenstruktur Ihrer Seite sein, der das Senden guter Daten an den Server verhindert.

    +0

    Ein Array ist keine Lösung, diese Daten können verloren gehen, wenn die Anwendung abstürzt. Wenn Sie sich stundenlang in einer toten Zone befinden, wird Ihr Speicher gesättigt sein (nicht sicher, ob die App beendet wird oder abstürzt). – AxelH

    +0

    @AxelH Das Array ist nicht im Speicher und es wird nicht verloren gehen, denn wenn es aktualisiert wird, wird es lokal gespeichert, CVS, SharedPreferences als JSON, DB, was auch immer. Es war nur ein Wort, so dass die SO weiß, dass es sich um eine "Liste" von Daten und nicht um ein einzelnes Objekt handelt. – danypata

    +0

    Ok, es war nicht klar, wo du das speicherst, da du von einem Array von "Positionen" sprichst (lokal gespeichert, alles auf deinem Gerät ist lokal;)) Ja, das gleiche Konzept wie meines, ich behalte nur die Daten um die Position auf einer Karte anzuzeigen, aber auch, um nicht gesendete Daten zu entfernen, die zwischen der Erstellung des JSON und der Antwort des Servers gespeichert wurden (nur um zu sagen, dass dies ein Schmerz in der ... war, um die Lücke auf den Daten zu verstehen;)) – AxelH

    Verwandte Themen