Обработка Compojure сеанса по параллельным запросам
У меня есть длительный запрос POST, который обновляет сеанс с запрошенным результатом.
Теперь, когда такие параллельные запросы POST выполняются из одного и того же сеанса, обновления, выполненные в параллельном запросе, не видны друг для друга.
В результате обновления сеанса, выполненные в нескольких параллельных запросах, в конечном итоге теряются.
Как обычно обрабатывается такой сценарий?
1 ответ
Итак, сценарий, короче говоря, такой:
- длинные запросы
- от того же пользователя
- потенциально одновременный
Первое разъяснение, которое вы должны сделать, - это параллелизм, свойственный проблемной области, или он вызван ошибками пользователя (например, двойной щелчок по некоторому элементу управления)?
В последнем случае как двойные представления, так и двойная обработка запросов могут быть предотвращены с помощью блокирующих механизмов.
Если предполагается параллелизм, вам нужно определить семантику обработки этих параллельных запросов.
Может быть, победит последний писатель, или, возможно, операции запросов будут коммутативными и могут быть применены полностью.
Как только вы определили эту семантику, преобразование их в код должно быть простым. Тем не менее, это звучит так, как если бы ссылочные типы Clojure (atom/agent/ref) или средства базы данных были бы более подходящими, чем объект сеанса.