Я отправляю огромное количество данных на сервер. Теперь, когда я отправил данные и жду ответа сервера, внезапно мое устройство Android теряет подключение к Интернету.
Итак, что я делал, это отображал диалоговое окно оповещения о потере соединения, но на стороне сервера данные уже были обработаны и обновлены где-то, например, по любому URL. Но мой телефон Android не знает этого, так как он никогда не получал ответ. Как это решить.
Может ли это быть сделано на стороне сервера или на самом Android Как?
Как сервер узнает, что телефон Android не будет слушать ответ?
Это может быть перспектива оптимизации взаимодействия клиент-сервер.
server
server-side
client-side
android-development
mayank_droid
источник
источник
Ответы:
Это довольно распространенная проблема с асинхронными транзакциями, которая состоит из нескольких частей.
Самое замечательное в HTTP заключается в том, что все эти проблемы довольно легко решить.
Представьте себе структуру URL следующим образом:
Использование HTTP-сообщения для отправки запроса на сервер с использованием уникального идентификатора запроса клиента - и чтобы сервер ответил с идентификатором задания. С точки зрения клиентов, если этот ответ не получен, запрос необходимо отправить повторно. С точки зрения сервера, идентификаторы запросов клиента должны кэшироваться в течение нескольких минут, в случае, если клиент отправляет дублированные запросы. Дублированные запросы обрабатываются простым возвращением клиенту идентичного идентификатора задания.
Клиент получает результаты запроса из URL-адреса результатов. Этот вызов может повторяться так часто, как это необходимо для получения результатов. Если он вызывается до того, как результаты станут доступны, тогда ответом может быть ответ NO-CONTENT, поэтому клиент знает, что сервер распознает идентификатор задания, но еще не имеет содержимого. Если идентификатор задания не распознан, то NOT-FOUND является подходящим ответом.
Конечным результатом является то, что клиент всегда может сделать разумное действие, когда сеть потеряна и восстановлена, а также сервер всегда может разумно обрабатывать запросы от клиента
источник
Это подпадает под основы протокола связи. Клиент Android запросил транзакцию, и Сервер должен выполнить транзакцию. Если транзакция зависит от подтверждения клиента Android, то это вызов ACK / NAK.
ACK (подтверждение) и NAK (отрицательное подтверждение) используются, чтобы сообщить другой стороне результат запроса.
Что вы спрашиваете о типе обмена рукопожатиями между клиентом и сервером, и он может быть выполнен с помощью базового обмена ACK / NAK.
Вот пример загрузки на Android файла с двухсторонним подтверждением.
В приведенном выше примере я добавил
#id
уникальный идентификатор для транзакции. Сервер должен получить файлы, создать запись транзакции и отправить ее в ответ на Android. Android должен затем подтвердить эту транзакцию (или, наоборот, NAK для отказа).Вот пример отключения Android во время рукопожатия.
В приведенном выше примере сервер принял загруженные файлы и отправил
#id
ответ ACK обратно в Android, но Android никогда не отвечает ACK. Устройство Android не удалось завершить квитирование. Вам решать, как Сервер должен справиться с этим. Удалите транзакцию, сохраните транзакцию и подождите, пока устройство Android не вернется позже или в любом случае завершите транзакцию.Сервер может предположить, что, поскольку устройство не ответило ACK. Устройство Android не обновило свое внутреннее состояние, чтобы указать, что загрузка прошла успешно. Я бы отменил транзакцию и позволил бы устройству повторить ее в будущем.
источник