Це підпадає під основи протокольного спілкування. Клієнт Android запитував транзакцію, і Сервер повинен здійснити транзакцію. Якщо транзакція залежить від підтвердження клієнта Android, це дзвінок ACK / NAK.
ACK (підтвердження) та NAK (негативне підтвердження) використовуються для того, щоб повідомити стороні результат запиту.
Те, про що ви запитуєте, - це тип обміну рукостисканням між клієнтом і сервером, і він може здійснюватися за допомогою базового обміну ACK / NAK.
Ось приклад завантаження файлу Android з двостороннім підтвердженням для 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 не оновлювало його внутрішній стан, свідчить про те, що завантаження було успішним. Я б відкинув транзакцію і дозволю пристрою повторити її в майбутньому.