Избегайте блокировки сессии PHP в Symfony - PullRequest
0 голосов
/ 26 октября 2018

Я использую Symfony в качестве основы для веб-приложения, и у меня возникает проблема сеансов блокировки PHP .

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

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

Я попытался изменить обработчик PHP на Memcache и решил эту ошибку , но я хотел быВам необходимо знать, знаете ли вы какой-нибудь простой способ избежать блокировки сеансов PHP в Symfony, когда PHP хранит сеансы в файлах .

Спасибо .

1 Ответ

0 голосов
/ 27 октября 2018

Эта ситуация не уникальна для Symfony.То же самое можно испытать почти в любом другом веб-приложении на основе PHP, использующем сеансы и параллельные запросы от одного и того же клиента.

Ярким примером является WordPress, где есть несколько плагинов, нуждающихся в обновлении.Если вы нажмете ссылку обновления AJAX на всех подключаемых модулях одновременно, они не будут обновляться одновременно.(Первый плагин, на котором вы щелкнули обновление, должен быть завершен до начала обновления 2-го плагина и т. Д.)

Возможное дублирование: Как обрабатывать несколько параллельных запросов от одного клиента к одному сценарию PHP

Часть проблемы, которая может быть специфичной для Symfony, заключается в том, что она действительно хочет, чтобы сеанс был доступен, потому что части инфраструктуры (такие как пакет безопасности) требуют сеанса.Когда сеанс основан на файле, вы достигаете предела, потому что вы не можете иметь несколько дескрипторов записи в один и тот же файл в любой момент времени, что является предупреждением, наложенным базовой операционной системой, а не PHP.- Это не проблема с дескрипторами памяти, поэтому memcached решил эту проблему за вас.

Есть ли причина, по которой вы хотите использовать файловые сессии вместо memcached?Существует множество причин, по которым memcached является лучшим выбором, как обсуждалось здесь: Файл сеанса VS Файл VS Memcache для кэша в PHP?

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