HTTP-Requests und Serverlast

FrankWST

Erfahrenes Mitglied
Hallo Ajax-Spezialisten,

ich habe eine Frage zum Thema "Implementierung eines Chat":
Man kann viele Beispiele finden die den Chat automatisch aktuell halten, indem ständig HTTP-Requests an den Server geschickt werden.
Das Problem das ich dabei sehe: Wenn nun viele Clients (sagen wir z.B. 100) gleichzeitig online sind und die Requests z.B. sekündlich abgesetzt werden, erzeugt das ja ein wahres "Bombardement" von HTTP-Requests auf den Server.

Nun meine Frage:
Gibt es denn da eine Möglichkeit den Server zu entlasten? Evtl. dadurch, dass er die Requests nicht sofort, sondern erst bei Eintritt einer tatsächlichen Änderung beantwortet?

Vielen Dank,
Frank
 
Mir läuft gerade der Begriff "Comet" über den Weg. Ist das evtl. die Lösung? Kennt das jemand von Euch?
 
Eventuell ist "Server push" auch das Stichwort das dir weiterhilft.
Einfach mal nach "Server push Ajax" googeln beispielsweise, vielleicht hilfts dir weiter.
 
Das Prinzip verstehe ich, aber wie erreiche ich es, dass der Request nie vollständig wird?

von http://xhtmlforum.de/43240-ajax-readystate-3-a.html :
readyState 3 ist eigentlich auch klar, die Daten werden sofort übertragen, wenn der Server ein "push" sendet, was z.b. unter PHP flush() entsprechen würde.

Ich schließe daraus, das du eine Endlos-Schleife in PHP z.B. mit while() baust, und wenn was neues reinkommt, ein flush() gerufen wird. Z.B. so:

PHP:
while(true)
{
   $data = get_newest_chat_entry();
   if($data)
   {
      if(function_exists("json_encode"))
      {
         $data = json_encode($data);
      }
      echo $data;
      flush();
   }
}

Das kannst du dann mit responseText abholen und so weiter... Den Rest dürftest du ja kennen.
 
Es gibt also zwei grundsätzliche Verfahren:
  1. Long poll
  2. Regelmäßiges Pollen

Bei 1. macht mir die Tatsache, dass für jeden Client auf dem Server ein Threat erzeugt wird etwas Angst.
Bei 2. geht der Server evtl. an der HTTP-Request-Bombardierung zu Grunde.

Um auf der ganz sicheren Seite zu sein, habe ich nun folgende Idee:
Regelmäßig pollen (Verfahren 2) wobei bei jedem Poll zusätzlich zu den Nutzdaten noch die Information über die aktuelle Serverlast mit geliefert wird. Erreicht die einen bestimmten Schwellwert, wird die Pollfrequenz verringert. Ist die Last wieder geringer, kann die Pollfrequenz wieder erhöht werden.

Wobei das die Frage aufwirft: Wie komme ich an diesen Wert "Serverlast"?
Oder messe ich einfach die Zeit, die die Beantwortung des letzten Request gekostet hat?
 
Zuletzt bearbeitet:
Zurück