Как отследить успешность доставки ответа HTTP?

Есть потребность узнать в PHP получил ли клиент содержимое HTTP ответа. Я не совсем понимаю как ведет себя apache в случае если я получил запрос, произошел разрыв и клиент ответа не получил. Могу ли я узнать об этом ? Что происходит с апачем в этот момент ?

Есть АПИ, по которому мне делают запрос на действия. Я их совершаю и даю ответ. Но перед ответом есть некоторая задержка и мне нужно точно знать, что я доставил ответ. Это гипотетическая ситуация, но она близка к реальной.
  • Вопрос задан
  • 2327 просмотров
Пригласить эксперта
Ответы на вопрос 3
gbg
@gbg Куратор тега Компьютерные сети
Любые ответы на любые вопросы
Единственный надежный способ удостовериться в том, что клиентская сторона получила и обработала ответ - запрограммировать клиентскую сторону на отправку подтверждения.

Потому как существует ненулевая вероятность, что клиентская сторона отвалится в тот момент, когда передача данных по HTTP уже выполнена, но данные фактически не были приняты клиентом.
Ответ написан
@fuzzdrive
req ->
<- ans
ok ->
<- ok ?
Ответ написан
akubintsev
@akubintsev
Опытный backend разработчик
У вас серьезное осложнение в задаче - сохранить имеющийся механизм транзакций.
Конечно, правильнее всего было бы слать запрос на сервер для генерации id пустой транзакции, а затем с ней работать. Но поскольку по условиям задачи этого уже не сделать, то остаются только костыли.
Ни apache, ни nginx вам не ответят о судьбе пакета в условиях плохой связи. Всё, что можно делать в данной ситуации, это регистрировать событие по ожиданию подтверждения операции и ждать соответствующего запроса от клиента, чтобы закрыть с признаком успеха или наоборот в случае таймаута.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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