Problema di polling lungo con un sito Web ad alto traffico
-
07-07-2019 - |
Domanda
Supponi di avere uno script, che esegue un polling lungo sul server per verificare se l'utente ha nuovi messaggi. Il lato server sarebbe qualcosa del genere
while counter < 5
if something_changed
push_changes_to_client
break
else
counter++
sleep 5
Che controlla il database 5 volte e ogni volta che non ci sono cambiamenti, attende 5 secondi fino al prossimo controllo, il che si traduce in un tempo di esecuzione massimo di circa 25 secondi.
Cosa succede quando il client si sposta rapidamente da una pagina all'altra? Suppongo che lo script del server continui a funzionare anche dopo lo spostamento del client in un'altra pagina, dove invia un'altra richiesta di modifiche.
Questo significa che quando molte persone si spostano rapidamente all'interno del sito (meno dell'esecuzione massima di 25 secondi su ogni pagina), il server deve continuare a eseguire tutti gli script, che stanno cercando di rispondere alla pagina che non non esiste più? Questo non farebbe in modo che il server utilizzi tutto il suo pool di thread abbastanza velocemente?
Soluzione
In un modello thread-per-connessione con chiamate sleep sincrone, questo può effettivamente legare un gran numero di thread. Tuttavia, se "dormi ""; pianifica semplicemente una richiamata e restituisce, il logjam del pool di thread può essere evitato.