Когда теряется HTTP-запрос? - PullRequest
       23

Когда теряется HTTP-запрос?

0 голосов
/ 25 января 2011

Мне нужно отправить довольно большие HTTP-запросы с мобильного устройства.В какой ситуации теряется запрос (чтобы отправленные данные пришлось повторно отправлять)?

Что произойдет, например, если в течение нескольких секунд отсутствует радиосвязь?Зависит ли это от какого-либо решения в сети, которым я не могу управлять?

На сервере нет тайм-аутов.Я контролирую клиента, и мы можем предположить, что он стабилен.Вызовы поступают в некоторые библиотеки Curl (POSIX C ++, встроенный Linux), и ограничено, насколько я могу их изменить.

Ответы [ 2 ]

0 голосов
/ 25 января 2011

Как сказали "некоторые", вы должны разбить свою загрузку на части, пронумеровать их и собрать на другом конце.Однажды я написал веб-сервис для этого, чтобы у клиента было подтверждение, что определенная часть была получена с правильной контрольной суммой (например, хэш SHA-1).

Если подтверждение не пришло из-за истечения времени ожидания или хэш не совпадает, клиент должен повторно отправить часть.Я бы посоветовал сделать каждый чанк достаточно маленьким, например, 1-10 кбайт, в зависимости от ожидаемой скорости сети (медленные чанки сети меньше).

0 голосов
/ 25 января 2011

Некоторые ситуации, когда запрос теряется:

  • Потеря питания в мобильном устройстве
  • Мобильное устройство теряет связь с сетью (радиоволны не могут достичь пункта назначения)
  • Ошибка программирования / ошибка памяти на мобильном устройстве
  • Слишком много мобильных устройств пытаются отправлять данные одновременно
  • Внешние помехи в радиолинии
  • Потеря питания в сетевой инфраструктуре
  • Кабели по ошибке обрезаны рабочими
  • Пожары, наводнения, землетрясения и т. Д. *

И тогда возникают все проблемына стороне сервера, например, нехватка памяти, время ожидания запроса и т. д. *

Если возможно, попытайтесь разбить информацию на более мелкие сегменты.Если что-то пойдет не так, информации будет меньше.


Обновлено 2011-01-27:

Мне может показаться немного пессимистичным, когда я говорю, что слишком много вещей может пойти не так, и , если что-то может пойти не так,это будет .

На стороне передатчиков довольно легко проверить, была ли передача успешной, если сервер отправил какое-то подтверждение.Он может быть отправлен как ответ на запрос на передачу или отдельным запросом.

В зависимости от того, что вы используете на стороне сервера, вы сможете определить, было ли потеряно соединение (и вседанные этого запроса, вероятно, тоже были потеряны).Мое мнение таково, что отправители несут ответственность за проверку успешности передачи и повторную отправку, если это не так.

Я не знаю, какие у вас данные, но я уверен, что это так.можно разбить его на более мелкие куски.Однако я не могу решить, желательно это или нет.Но если у вас есть мобильные устройства и передача данных занимает много времени, вероятно, это так.

...