что вызывает только 1 одновременное соединение? - PullRequest
0 голосов
/ 21 июня 2019

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

Самым странным является то, что иногда он работает так, как должен, одновременно (screen: https://imgur.com/8oDGV8t), и примерно через 10 минут он ожидает выполнения одного процесса и только затем запускает другой процесс, выполняя их один за другим. один (экран: https://imgur.com/OPkzYNh).

Код для тестовых скриншотов:

sleep(5);
exit();

P.S. когда эти AJAX-запросы помещаются в очередь, обычные html-запросы «ожидают в очереди».

1 Ответ

3 голосов
/ 21 июня 2019

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

Что происходит, так это то, что новый запрос ожидает закрытия сеанса предыдущего запроса.

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

Вы можете избежать этого, не начав сессию с самого начала. Если вам нужен сеанс, вам нужно закрыть сеанс сразу после его начала. Если вам нужно установить переменные $ _SESSION, это нужно сделать перед закрытием сессии. Вы можете сделать это так:

session_start();

$_SESSION['some'] = 'value';
session_write_close(); // From here on out, concurrent requests are no longer blocked

Переменные $ _ SESSION по-прежнему будут доступны после закрытия сессии.

Смотри также: https://codingexplained.com/coding/php/solving-concurrent-request-blocking-in-php

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