Итак, похоже, что здесь происходит то, что ваш клиент отправляет запрос, не получает ответ своевременно и в результате повторяет тот же запрос еще раз (как и должно быть).Это, в свою очередь, приводит к тому, что на ваш сервер отправляется несколько POST
запросов (почти последовательно), с которыми ваш сервер в настоящее время не может справиться должным образом.
Чтобы проверить / отладить это, попробуйте отключить повтор HTTP-запросов следующим образом.:
defaultHttpClient.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler
(0, false));
Это, конечно, будет иметь дело с вашей проблемой дубликатов запросов, но затем создаст еще одну более серьезную проблему;а именно, он попытается один раз (и только один раз) и потерпит неудачу.Из информации, которую я получил из ваших комментариев, вот несколько идей, которые вы можете попробовать:
Пожалуйста, ознакомьтесь с псевдокодом, поскольку у меня нет всех деталей того, как ваш клиент спроектирован
Обработка нескольких POSTS подряд
- Отключить автоматические повторные попытки (как указано выше)
- Обернуть ваши
POST
запросы в цикл, аналогичныйкак это реализовано - Затем либо
sleep
между вашими ручными попытками или реализацией вашей версии экспоненциального отката
Независимо от того, что ваш сервер будет нуждаться в возможности разумно обрабатывать дублирующиеся запросы, это, в конце концов, HTTP.Однако вы, по крайней мере, даете ему возможность обработать первый, прежде чем он будет засыпан дубликатами.
Я рекомендую сделать шаг first , который требуется выполнить при обработке запроса, чтобы установить некоторыеформа (дубликат) флаг .Затем, если / когда он получает дублирование, он продолжает обрабатывать первый запрос (как обычно) и молча игнорирует дубликаты.
Итак, просто подытожим, смысл всей этой схемы был дает вашему серверу возможность установить флаг dupe .После этого задача вашего сервера - отбрасывать (или обрабатывать) дублирующиеся запросы по мере необходимости.Имеет ли это смысл?