Google App Engine - Вызов getSession (). Invalidate (); заставляет приложение работать странно - PullRequest
3 голосов
/ 30 мая 2010

Когда я звоню hreq.getSession().invalidate(); движок приложения сильно тормозит. Я посмотрел на appstats и увидел, что на странице, где нет вызовов в базе данных, он вызывал memcache.get и datastore.get 23 раза. Трассировка стека этих вызовов показала, что он вызывается из getSession (). Это происходит только на рабочем сервере. Каждый раз, когда я делаю запрос к странице, он делает кучу вызовов memcache и datastore. Это замедление исчезает, когда я перезагружаю свой браузер.

Когда я изменил код, чтобы просто установить для свойства isLoggedIn сеанса значение false, вместо вызова hreq.getSession().invalidate();, все было в порядке.

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

Это ошибка в движке приложения?

1 Ответ

2 голосов
/ 30 мая 2010

Не удивительно, что getSession () взаимодействует с memcache и хранилищем данных. Посмотрите на сущность _ah_SESSION в средстве просмотра хранилища данных. Вы заметите, что это Blob, а Blob - это информация о сеансе. Взгляните на это .

App Engine включает в себя реализацию сеансов, используя сеанс сервлета интерфейс. Реализация магазинов данные сеанса в App Engine хранилище данных для настойчивости, а также использует memcache для скорости. Как и в большинстве другие контейнеры сервлетов, сеанс атрибуты, которые установлены с session.setAttribute () во время запрос сохраняется в хранилище данных по адресу конец запроса.

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

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