Найти - Пользователи
Полная версия: Выбор веб-сервера, ошибки в thread
Начало » Pyramid / Pylons / TurboGears » Выбор веб-сервера, ошибки в thread
1 2 3
alexlp
С моим pylons-приложением работает около 30 человек. Шаблоны напичканы AJAX-ом, запросов от одного клиента к серверу немало. Иногда один пользователь может получить данные, которые запросил другой пользователь, либо внося изменения сервер записывает данные в сессию другого пользователя. Складывается впечатление, что сервер не определяет куда отправлять данные и/или записывает их ошибочно.
Я использовал базовый “paster”, связку apache2 + mod_wsgi, nginx+paster/flup ситуация не меняется (хотя с apache2 ошибок меньше, но и работает он медленнее). В какой-то документации по WSGI узнал, что большое число запросов в одном потоке может вызвать такие ошибки. В Apache2 я указывал в WSGIDaemonProcess threads=100 (по умолчанию 15), сервер работает медленнее, тем не менее ошибочные сессии случаются.

Есть ли лекарство от этого недуга или это родовая травма Pylons?
ofigetitelno
:)
Какая версия pylons?
Что понимается под сессией - пилоновская сессия?
alexlp
Pylons 0.9.7 Beaker 1.5.
После ввода логина и пароля пользователем открывается сессия бейкера, в data/session создается файл с переменными пользователя. Вот только сервер почему то ошибается при работе с пользователем. Я точно не знаю с чем проблемы либо с бейкером, либо с веб-сервером. Да еще, ошибка скорее всего происходит, когда происходит одновременный запрос. Например, пользователь 1 открывает страницу /user/setuser и пользователь 2 открывает /user/setuser, увы пользователь 2 получает запрос пользователя 1 как и пользователь 1 получает свою страницу, запрос пользователя 2 почему то игнорируется.
estin
>> запрос пользователя 2 почему то игнорируется.
Вообще не получает ответа?

Кеширование есть?
alexlp
>> Вообще не получает ответа?
Получает неверный ответ. В момент запроса до его получение проходит некое время (ну пока сервер отгенерирует страницу), в случае “неверного” ответа, страница вылетает моментально.
Хуже всего, что данные посылаемые одним пользователем ложатся в сессию (выбранный из базы user с которым работает пользователь 1) другому.

Кеширований нет (насколько мне известно в pylons кеширование отключено по-умолчанию), сервер виден напрямую, прокси нет (никаких nginx, squid…).
ofigetitelno
:)
Покажите кусок кода, где вы сохраняете данные в сессию, и где достаёте данные из неё…
alexlp
Модель авторизации была взята от сюда.
http://projecthq.org/documentation/introduction/demonstration.html

после залогинивания на стороне сервера создается файл beaker.session с переменными

(dp1
S'session'
p2
(dp3
S'REMOTE_USER_NAME'
p4
Valexlp
p5
sS'REMOTE_USER'
p6
I1
sS'REMOTE_USER_IP'
p7
V192.168.1.1
p8
……

Старые файлы Beaker я периодически удаляю (по рекомендации разработчиков Beaker).

Если вы посмотрите исходники Project HQ, то в lib.base в методе __call__ есть переменная c.current_user которая является сcылкой на текущего пользователя. извлекается она из session

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

Я не знаю где именно кроется эта ошибка, в Beaker (смущает частое обновление с критикал фиксами) или в WSGI-приложении или в веб-сервере, не знаю
estin
95% что ошибка кроится именно в вашем коде.

Протестируйте простой код (вне вашей архитектуры, но с темже окружением), записывающий в сессию пользователя счетчкик его запросов и возвращающий это количество в ответ.

Напишите программку для тестирования которая в N потоков будет
“открывать сессию” логинится (получать куку сессии), и с этой кукой переодически делать запрос и сравнивать ответ.

Например на 15-ый запрос localhost:8080/?t=thread1 должен быть ответ thread1_15.
alexlp
Если с системой работает только один пользователь либо запросы последовательны, то ошибок не возникает. Но если сделать запрос одновременно (достаточно по счету “три, два, один..”), то возникает ошибка.
Кука на протяжении сеанса не меняется.
PooH
Не знаю насколько в тему, но была история с apache2 + mod_wsgi + TurboGears под windows, странным образом перескакивали куки с пользователя на пользователя, на тестовой машине с той же связкой под linux такое не наблюдалось. Полностью так и не разобрался, грешу на сборку mod_wsgi под win, я ее где-то нашел готовую, перевел на связку apache2 + mod_python.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB