После того, как веб-страница PHP с сервера Apache загружена браузером, клиентский javascript отправляет запросы AJAX каждые 5 секунд в скрипт обновления PHP.Ответ AJAX, закодированный в JSON, может быть довольно большим, поэтому я хочу просто отправить пустой массив '[]', если нет изменений с момента предыдущего запроса AJAX, или весь массив, содержащий различные объекты JSON, если былизменить с момента последних запросов AJAX.
Для реализации отправки '[]' или полного массива я использую переменную сеанса.Мой скрипт обновления выглядит следующим образом:
<?php
session_start();
$output = '[]'; // server is running PHP 5.1 so can't use built in JSON encode
// code here queries a database and updates $output based on the query result
if (isset($_SESSION['previous_output'])) {
if ($_SESSION['previous_output'] == $output) {
echo '[]';
} else {
$_SESSION['previous_output'] = $output;
echo $output;
}
}
?>
После реализации вышеописанного сценария администратор веб-сервера заметил, что "слишком много" процессов httpd создаются и зависают, что в конечном итоге приводит к остановке сервера.
Когда я удаляю код, включающий переменные сеанса, некоторые процессы httpd все еще зависают, но «отставание» не так уж плохо, и в конечном итоге процессы уходят до того, как на сервер будет оказано заметное влияние.
Веб-сервер не используется интенсивно, обслуживая, может быть, полдюжины «посетителей» в любое время. Веб-страница, выполняющая 5-секундные запросы AJAX, «защищена», что означает, что только один пользователь-администратор может получить к нему доступ одновременно.
Я нашел еще одну публикацию на PHP MySQLi Singleton для Ajax-запросов завершается во многих процессах , что звучит похоже, и это относится к проекту AJAX Push Engine (APE), который я хотел бы исследоватьдальше, в конце концов. Однако, я в настоящее время не хватает времени и ресурсов (например, не могу настроить APE сервер ...), так что я в растерянности относительно того, что можно сделать.
Любой совет, как выполнять 5-секундные запросы AJAX, не оказывая негативного влияния на производительность сервера?Почему использование переменной сеанса имеет такое заметное значение?