Это подпадает под основы протокола связи. Клиент Android запросил транзакцию, и Сервер должен выполнить транзакцию. Если транзакция зависит от подтверждения клиента Android, то это вызов ACK / NAK.
ACK (подтверждение) и NAK (отрицательное подтверждение) используются, чтобы сообщить другой стороне результат запроса.
Что вы спрашиваете о типе обмена рукопожатиями между клиентом и сервером, и он может быть выполнен с помощью базового обмена ACK / NAK.
Вот пример загрузки на Android файла с двухсторонним подтверждением.
Android -> upload files -> Server
Android <- ACK #id <- Server
Android -> ACK #id -> Server
В приведенном выше примере я добавил #id
уникальный идентификатор для транзакции. Сервер должен получить файлы, создать запись транзакции и отправить ее в ответ на Android. Android должен затем подтвердить эту транзакцию (или, наоборот, NAK для отказа).
Вот пример отключения Android во время рукопожатия.
Android -> upload files -> Server
Android <- ACK #id <- Server
/** no ACK response **/
В приведенном выше примере сервер принял загруженные файлы и отправил #id
ответ ACK обратно в Android, но Android никогда не отвечает ACK. Устройство Android не удалось завершить квитирование. Вам решать, как Сервер должен справиться с этим. Удалите транзакцию, сохраните транзакцию и подождите, пока устройство Android не вернется позже или в любом случае завершите транзакцию.
Сервер может предположить, что, поскольку устройство не ответило ACK. Устройство Android не обновило свое внутреннее состояние, чтобы указать, что загрузка прошла успешно. Я бы отменил транзакцию и позволил бы устройству повторить ее в будущем.