Обработка сеанса Compojure для параллельных запросов

У меня есть длительный запрос POST, который обновляет сеанс запрошенным результатом.

Теперь, когда такие одновременные запросы POST выполняются из одного и того же сеанса, обновления, выполненные в параллельном запросе, не видны друг другу.

В результате обновления сеанса, выполненные в нескольких одновременных запросах, в конечном итоге теряются.

Как обычно обрабатывается такой сценарий?


person Binita Bharati    schedule 20.11.2013    source источник


Ответы (1)


Итак, сценарий, вкратце, примерно такой:

  • длинные запросы
  • от того же пользователя
  • потенциально параллельный

Первое уточнение, которое вы должны сделать: параллелизм присущ проблемному домену или он вызван ошибками пользователя (например, двойным нажатием на какой-либо элемент управления)?

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

Если параллелизм должен иметь место, вам необходимо определить семантику обработки этих одновременных запросов.

Может быть, последний писатель побеждает, или, может быть, операции запросов коммутативны и могут применяться все вместе.

Как только вы определите эту семантику, перевод ее в код должен быть простым. Тем не менее, похоже, что либо ссылочные типы Clojure (atom/agent/ref), либо средства базы данных подходят лучше, чем объект сеанса.

person deprecated    schedule 20.11.2013
comment
В этом случае одновременный запрос из одного и того же сеанса должен быть разрешен. Рассмотрю предложения. - person Binita Bharati; 20.11.2013