2009-09-14 12 views
2

Dites que j'ai un script qui effectue une longue interrogation sur le serveur pour vérifier si l'utilisateur a de nouveaux messages. côté serveur serait quelque chose comme çaProblème d'interrogation longue avec un site Web à fort trafic

while counter < 5 
    if something_changed 
     push_changes_to_client 
     break 
    else 
     counter++ 
     sleep 5 

qui vérifie la base de données 5 fois et chaque fois que s'il n'y a pas de changement, il attend 5 s jusqu'à ce regard, ce qui entraîne dans le temps d'exécution maximum d'environ 25s. Que se passe-t-il lorsque le client passe d'une page à une autre très rapidement? Je suppose que le script du serveur continue à fonctionner même après que le client se soit déplacé vers une page différente, où il envoie une autre demande de modifications. Cela signifie-t-il que lorsque beaucoup de gens se déplacent rapidement sur le site (moins de 25s d'exécution maximum sur chaque page), alors le serveur doit continuer à exécuter tous les scripts, qui tentent de répondre à la page n'existe plus? Est-ce que cela ne causerait pas au serveur d'utiliser tout son pool de threads assez rapidement?

Répondre

4

Dans un modèle thread-par-connexion avec des appels de veille synchrones, cela peut en effet bloquer un grand nombre de threads. Cependant, si le "sleep" planifie simplement un rappel et revient, le logjam du pool de threads peut être évité.

Questions connexes