Обработка Compojure сеанса по параллельным запросам

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

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

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

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

1 ответ

Итак, сценарий, короче говоря, такой:

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

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

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

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

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

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

Другие вопросы по тегам