Dies fällt unter die Grundlagen der Protokollkommunikation. Der Android-Client hat eine Transaktion angefordert, und der Server muss die Transaktion ausführen. Wenn die Transaktion von der Bestätigung des Android-Clients abhängt, ist dies die ACK / NAK-Kommunikation.
ACK (Acknowledgement) und NAK (Negative Acknowledgement) teilen der Gegenseite das Ergebnis einer Anfrage mit.
Sie fragen nach einer Art Handshake- Austausch zwischen Client und Server, der mit einem einfachen ACK / NAK-Austausch durchgeführt werden kann.
Hier ist ein Beispiel dafür, wie Android eine Datei mit bidirektionaler Bestätigung hochlädt.
Android -> upload files -> Server
Android <- ACK #id <- Server
Android -> ACK #id -> Server
Im obigen Beispiel habe ich einen #id
eindeutigen Bezeichner für die Transaktion hinzugefügt . Der Server sollte die Dateien empfangen, einen Transaktionsdatensatz erstellen und diesen als Antwort an Android zurücksenden. Android sollte dann eine Bestätigung dieser Transaktion (oder alternativ eine NAK für eine Ablehnung) folgen.
Hier ist ein Beispiel für eine Android-Verbindung, die während des Handshakes getrennt wird.
Android -> upload files -> Server
Android <- ACK #id <- Server
/** no ACK response **/
Im obigen Beispiel hat der Server die hochgeladenen Dateien akzeptiert und eine #id
ACK-Antwort an Android zurückgesendet, Android antwortet jedoch nie mit einer ACK. Das Android-Gerät konnte den Handshake nicht abschließen. Sie müssen entscheiden, wie der Server damit umgehen soll. Zerstören Sie die Transaktion, behalten Sie die Transaktion bei und warten Sie, bis das Android-Gerät später zurückkehrt, oder schließen Sie die Transaktion trotzdem ab.
Der Server kann davon ausgehen, dass das Gerät nicht mit ACK geantwortet hat. Das Android-Gerät hat seinen internen Status nicht aktualisiert, um anzuzeigen, dass der Upload erfolgreich war. Ich würde die Transaktion verwerfen und dem Gerät erlauben, sie in Zukunft zu wiederholen.