@martensit

Как клиенту гарантированно знать что ответ дошел до сервера?

Клиент отправляет GET запрос серверу.
Сервер получет его, производит определенную операцию, и отправляет ответ, что запрос был получен а операция выполнена.

Но допустим происходит кратковременное падение сети, пока запрос летит серверу, либо когда ответ сервера летит клиенту.
В итоге клиент оправил запрос серверу а ответа не получил. "истекло время ожидания".
Как клиенту точно знать, была ли выполнена нужная операция на сервере или нет?
Можно конечно повторно отправить этот запрос, но тогда операция может быть выполнена дважды, а нам этого тоже не нужно.
  • Вопрос задан
  • 165 просмотров
Решения вопроса 3
MvcBox
@MvcBox
Software Engineer [C/C++/JS(for Node.js)/etc]
Для таких операций используйте уникальные идентификаторы запросов.
А на сервере добавьте соответствующую логику проверки, чтобы отсеивать запросы с повторяющимися идентификаторами.
Ответ написан
Комментировать
@dpws
Сделайте запрос идемпотентным, например.

Вот неплохая статья от яндекса: Стажёр Вася и его истории об идемпотентности API

P.S.: А вообще, GET запросы не должны иметь сайд-эффектов.
Ответ написан
Комментировать
erge
@erge
Примус починяю
имхо, только повторно со стороны клиента посылать запрос, пока не получит ответ.
на сервере соответствующим образом обрабатывать запросы дубли.

PS: чтобы допустим различать дубли от недублей, отсылать повторный запрос с одинаковым "таймкодом", новые запросы с новым "таймкодом"
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы