Dopo che una pagina Web PHP da un server Apache viene caricata dal browser, il javascript lato client invia richieste AJAX ogni 5 secondi a uno script di aggiornamento PHP. La risposta AJAX, codificata in JSON, può essere abbastanza grande, quindi voglio inviare semplicemente l'array vuoto '[]' se non ci sono cambiamenti dalla richiesta AJAX precedente, o l'intero array che contiene vari oggetti JSON se c'è stato un cambia rispetto alle ultime richieste AJAX.Centinaia di processi Apache che si aggirano dopo le richieste Ajax quando viene utilizzata la variabile di sessione
Per implementare l'invio '[]' o l'array completo sto usando una variabile di sessione. Il mio script di aggiornamento appare come:
<?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;
}
}
?>
Dopo aver implementato lo script precedente, l'amministratore del server web notato "troppi" processi httpd in fase di creazione e in giro, alla fine portando il server a un brusco stop.
Quando rimuovo il codice che coinvolge le variabili di sessione, alcuni processi di httpd rimangono bloccati, ma il "backlog" non è così male, e alla fine i processi spariscono prima che ci sia un impatto notevole sul server.
Il server Web non è molto utilizzato, in grado di servire una mezza dozzina di "visitatori" in qualsiasi momento. La pagina Web che esegue le richieste AJAX di 5 secondi è "protetta", ovvero solo un utente amministratore può accedervi in un momento
Ho trovato un altro posting allo PHP MySQLi Singleton for Ajax-Requests end in to many processes che sembra simile, e si riferisce al progetto AJAX Push Engine (APE), che vorrei approfondire ulteriormente alla fine.Tuttavia, sono attualmente premuto per tempo e risorse (ad es. configurare un server APE ...), quindi sono perso per ciò che può essere fatto
Qualche consiglio su come eseguire le richieste AJAX di 5 secondi senza influire negativamente sulle prestazioni del server? l'uso della variabile di sessione fa una differenza così evidente?
In aggiunta a questo, esaminare la direttiva KeepAliveTimeout Apache http://httpd.apache.org/docs/2.0/mod/core.html#keepalivetimeout – Mike