2013-11-20 1 views
0

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

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

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

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

ответ

2

Так сценарий, в общем, как это:

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

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

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

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

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

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

+0

В этом случае необходимо разрешить одновременный запрос из того же сеанса. Посмотрите на предложения. –

Смежные вопросы