Lang-Abfrage-Ausgabe mit hohen Verkehr Website
-
07-07-2019 - |
Frage
Sagen wir, ich Skript haben, das lange Abfrage auf dem Server hat zu überprüfen, ob Benutzer keine neuen mesages hat. Server-Seite würde so etwas wie diese
while counter < 5
if something_changed
push_changes_to_client
break
else
counter++
sleep 5
Welche prüft Datenbank 5 mal und jedes Mal, wenn es keine Änderung gibt, es 5s, bis nächste Prüfung, die in maximaler Ausführungszeit von ca. 25s Ergebnissen wartet.
Was passiert, wenn der Client von einer Seite zur anderen bewegt wirklich schnell? Ich nehme an dem Script Server behält auch nach dem Client-Umzug in anderer Seite ausgeführt wird, wo es eine weitere Anforderung für Änderungen sendet.
Bedeutet dies, dass, wenn viele Leute schnell rund um die Seite (auf jeder Seite weniger als die 25s max Ausführung) bewegt, dann wird der Server zu halten, hat alle Skripte ausgeführt, die auf Seite zu reagieren versuchen, die doesn ‚existiert t mehr? Wäre dies nicht der Server dazu bringen, alles zu verwenden, ist Thread-Pool ziemlich schnell?
Lösung
In einem Thread-per-Verbindungsmodell mit Synchron Schlaf Anrufen, kann dies in der Tat eine große Anzahl von Fäden binden. Wenn das jedoch „schlafen“ einfach plant einen Rückruf und kehrt, kann der Thread-Pool logjam vermieden werden.