Обработка перекрывающихся асинхронных запросов POST - PullRequest
0 голосов
/ 26 сентября 2018

Мы внедрили Как использовать POST для асинхронных задач в нашем проекте для долгосрочных задач.

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

Это фактически означает, что кроме последнего запроса POST другие приводят к расточительным вычислениям

Есть ли какие-либо шаблоны проектирования для решения этой проблемы?

1 Ответ

0 голосов
/ 27 сентября 2018

Я не верю, что существует общепринятый шаблон для этой ситуации.

Существует как минимум 2 ситуации, когда может возникнуть дубликат POST:

  1. клиент повторно передает исходный POST по любой причине (например, пропустил ответ).

  2. Пользователь повторно передает исходный POST (намеренно или нет) или выдает новый POST, предназначенный для замены более ранних версий.

Лучше всего решать проблему на стороне сервера.

Одним из решений является добавление уникального идентификатора (такого как GUID или естественный ключ) к каждому POST, а затем проверка сервером на наличие запросас этим идентификатором уже существует или нет.Ваш сервер должен будет сохранить состояние где-нибудь, пока обрабатывается существующий POST (cookie, SESSION, локальный файл, база данных).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...