Режим Google Appengine по умолчанию состоит в том, что каждый экземпляр работает в однопоточном режиме.Они обрабатывают параллельные запросы, порождая новые экземпляры JVM, если это необходимо.
A новый коммутатор , хотя позволяет appengine обрабатывать несколько запросов параллельно в одном и том же экземпляре.
ЧтоДо сих пор я делал это в регулярно размещаемых веб-приложениях Java, чтобы обеспечить безопасность потоков между запросами одного и того же пользователя о синхронизации в сеансе http (или в значении, сохраненном в сеансе). Spring также делает это (используя флаг synchronizeOnSession
).
Это невозможно в GAE, поскольку HttpSession (вместе со всеми переменными, которые он хранит) всегда является новым в каждом запросе http,То есть хеш-код всегда отличается.Так что синхронизация на это не имеет никакого эффекта.Но даже если бы это было возможно, appengine не гарантирует, что два запроса от одного пользователя будут обрабатываться одним и тем же экземпляром (что-то вроде липкого сеанса).
Новый флаг appengine предупреждает, что:
Если вы хотите использовать параллельные запросы, код вашего приложения должен использовать правильную синхронизацию потоков перед включением.
Итак, как я могу гарантировать, что мое приложение будет потокобезопасным в отношении операцийот того же пользователя?Меня больше всего волнуют действия, которые пользователь может выполнять с данными, существующими в его сеансе http.Очевидно, меня волнует только синхронизация запросов одного и того же пользователя в одном и том же экземпляре.
Спасибо