Nr Clients müssen "Umfrage" der Server ist.
Ich denke, der Schlüssel hier ist, Interaktionsdesign zu denken. Der Trick besteht darin, den Benutzer zu denken, dass der Chat sofort ist, aber wenn er in Wirklichkeit einmal alle 1 oder 2 oder 3 oder 10 Sekunden aktualisiert wird.
Ideen:
1) Wenn der Benutzer eine Nachricht sendet, zeigen Sie sie direkt in den Chat und eine Umfrage auslösen.
2) Wenn eine Umfrage mit mehreren Nachrichten von anderen Benutzern zurückkommt, fügen Sie sie nicht alle auf einmal hinzu, fügen sie tatsächlich über einen Zeitraum von 1-2 Sekunden oder so hinzu, mit zufälligem Abstand, so dass sie wie sie aussehen kommen "sofort" und unabhängig voneinander.(Wenn mehrere Nachrichten gleichzeitig eingehen, stellt der Benutzer schnell fest, dass der Chat dort aktualisiert wurde und nicht fortlaufend.)
3) Wenn der Benutzer für eine bestimmte Zeit inaktiv ist. Lassen Sie die Pollrate einmal alle 10 Sekunden fallen.
4) Wenn der Benutzer aktiv ist, dh viele Nachrichten senden, häufiger abfragen.
5) Haben Sie eine statische Datei für jeden Kanal, in dem Sie die Zeit schreiben, zu der der Chat zuletzt aktualisiert wurde. Zum Beispiel hat Datei chat-teenfun-lastupdate.txt
den Inhalt 1224934239
oder welches Zeitformat Sie bevorzugen. Dienen Sie dieser Datei statisch, und lassen Sie die Clients diese Datei abfragen, um zu überprüfen, ob der Kanal aktualisiert wurde, und rufen Sie stattdessen chat-poll.php?ch=teenfun
auf, der eine dynamische Überprüfung durchführt. Statische Dateien werden abhängig von der Arbeit, die für das dynamische Skript erforderlich ist, etwa 10 bis 100 Mal schneller bereitgestellt. Sie benötigen sie, wenn Sie mehr als 250 Benutzer anfragen.
Viel Glück und viel Spaß!
/0
PS. Alternativ könnten Sie Clients auch einen Ajax-Aufruf an den Server senden lassen und sie "hängen" lassen. Das heißt, Sie akzeptieren ihre Anfrage und tun so, als würden sie anfangen, Daten zurückzusenden, aber dann pausieren Sie einfach. Wenn etwas passiert, beenden Sie die Antwort mit den entsprechenden Daten. Damit dies funktioniert, glaube ich, dass Sie Ihren eigenen HTTP-Server schreiben müssen, der das speziell tut, da Sie nicht 250 PHP-Prozesse im Speicher haben können. Vielleicht könnte Lighttpd auf diese Weise irgendwie mit diesem LUA-Cache-Mod verwendet werden. Ich weiß es nicht. Wäre aber interessant. Hölle, ich muss es irgendwann versuchen :)
Sie wissen, dass hier einige reale Beispiele solcher Dinge in PHP/JS sind? Ich schreibe auch einen für meinen Job, ja, es hat seine Grenzen, aber es ist nicht unmöglich. Auch ohne Push-Technologie. – elcuco
Realtime bedeutet für mich Echtzeit (außer Verbindungsgeschwindigkeit) ... aber du hast Recht: da draußen gibt es viele Dinge, die sich echt anfühlen ... – TheHippo
Ich glaube, letzteres ist der Ansatz, den Facebook Messenger benutzt.Es ist vielleicht nicht unbedingt so elegant wie ein herkömmlicher Client-Server-Ansatz, aber es erledigt die Aufgabe. – Rob