Chat ohne SetTimeOut?

kuhlmaehn

Erfahrenes Mitglied
Ich wollte mal zu Übezwecken einen einfachen Chat schreiben. Nun finde ich die Lösung das alle paar Sekunden mit SetTimeOut ein phpscript aufgerufen wird irgendwie blöd und frage mich ob das nicht auch anders geht. Ich will nur eine Verbindung aufbauen wenn auch etwas neues geschrieben wurde.
Ich hab mir überlegt ob es nicht so gehen könnte:
Zu beginn führt jeder "Client", also der brower von jedem Chatter ein xmlRequest Aufruf durch der aber erstmal nicht vom Server/phpscript beantwortet wird (da weiss ich nicht ob das geht). Wenn jetzt jemand (über einen 2. xmlRequest) etwas schreibt bzw. an das phpscript sendet dann beantwortet es den Request vom Anfang. Bei Client wird dann, nachdem die Antwort eingegangen ist, ein neuer xmlRequest gestartet der wieder nicht beantwortet wird bis jemand was schreibt.
Ich weiss nicht ob das xmlRequestObject wirklich solange wartet oder ob es überhaupt wartet. ^^
Ich hab gerade erst angefangen mich da etwas reinzulesen ;)
Oder vielleicht gibt es ja auch eine andere Lösung! Ich finde es nur wie gesagt irgendwie unsauber das alle Sekunden etwas passiert auch wenn gar nichts passieren müsste oder aber das mehr Zeit vergeht als nötig bis eine neue Nachricht erscheint.
Danke! :)

[EDIT]
Mist -.-"
http://www.tutorials.de/forum/javas...auche-hilfe-datenbank-javascript-problem.html

Vielleicht hat sich da ja was getan? Und ich wüsste trotzdem gerne warum das nicht klappt wie ich mir das gedacht hab :)
 
Zuletzt bearbeitet:
Bei Client wird dann, nachdem die Antwort eingegangen ist, ein neuer xmlRequest gestartet der wieder nicht beantwortet wird bis jemand was schreibt.
Ich weiss nicht ob das xmlRequestObject wirklich solange wartet oder ob es überhaupt wartet. ^^

Das sollte theoretisch gehen, du müsstest ein PHP-Skript haben, welches in einer Endlosschleife abfragt, ob es was neues gibt, und erst dann etwas an den Browser sendet und beendet wird.
Ob das für die Clientseite Probleme gibt bei langer Antwortzeit, hab ich noch nicht probiert...sollte es aber eigentlich nicht.

Das Problem ist allerdings dabei, dass du wiederum ...diesmal ohne Umweg über den Clienten, regelmässig die DB abfragen müsstest. Dazu kommt noch, dass du im Zweifelsfall ständig einen Haufen Instanzen dieses Skriptes (halt eine pro User) am Laufen hast inclusive der DB-Abfragen...ist fraglich, ob der Server da mitspielt(und dein Provider...schau da vorher lieber in den AGB nach, ob solche Chats überhaupt erlaubt sind). Das PHP-Zeitlimit kommt dir evtl. natürlich auch noch in die Quere.
 
Vielleicht hab ich jetzt was nicht verstanden aber so wie ich es dachte brauche ich doch eigentlich keine Endlosschleife da ich ja einfach die Antwort in dem Moment sende wo auch jemand was schreibt. Also wenn jemand einen Antworttext an das phpscript sendet, verteilt dieses den Text einfach im selben Abwasch an die noch stehende Verbindung mit den "Clienten".
 
Ich rate von Schleifen im PHP Script ab.
Belastet den Server extrem.

Leider gibt es keine andere Möglichkeit wie vom Clienten aus immer neu am Server anzufragen.

Oder Du verwendest einen IRC Chat, wie auf dieser Seite hier (wobei du ja einen eigenen zum üben bauen wolltest ^^).

Gruß tyg3r
 
mh ja gute Frage ;(
Das kann ich so wohl vergessen..

Kann man denn nicht irgendwie einstellen, dass nicht jeder User eine neue Instanz des phpscripts startet, sondern das alle User das selbe Script nutzen?
Oder könnte ich mit dem xmlRequest auch einfach einen richtigen Server, also eine auf dem Server laufende exe ansprechen?

Und warum gibt es nicht die Möglichkeit, dass der Server, nach einen ersten Request vom Clienten, etwas an den Clienten senden kann? ^^
(Nagut ich glaub dafür ist javascript nicht gemacht ;( )
 
Über das Thema haben sich schon viele den Kopf zerbrochen :)
Was meinst, warum ALLE auf dem Http-Protokoll basierende Chats mit setTimeOut auf Clientseite arbeiten :)

Du benötigst dazu eine feste Verbindung zwischen Server und Client (was das Http-Protokoll nicht unterstützt).
So, dass der Server den Clienten bei Bedarf ansprechen kann.

Zerbrich Dir nicht den Kopf, js-Lösung oder IRC-Plugin ;)
 
Nagut schade :p
Ich mag Javaplugins irgendwie nicht so..
Hab mir gerade mal den MSN Web Messenger angeguckt (bin aber nicht wirklich schlau geworden). Läuft das bei denen dann auch einfach mit nem timeout? Das muss deren Server bei den vielen Benutzern doch in die Knie zwingen!?
 
Du benötigst dazu eine feste Verbindung zwischen Server und Client (was das Http-Protokoll nicht unterstützt).
So, dass der Server den Clienten bei Bedarf ansprechen kann.

That's what "they" tell you ;) Nein, du hast schon recht: eine feste Verbindung im eigentlichen Sinne ist nicht möglich - aber der Server kann zum Beispiel für die Antwort 'unendlich lange' brauchen, siehe Idee mit der PHP-Endlosschleife.

Hab mal zum Spaß nen Chat-prototyp gebastelt, der ungefähr genau das macht, was oben beschrieben wurde: je client eine Instanz des scripts, Server frägt die Datenbank ab und schickt entsprechend neuen TExt dann an den client:
http://chat.freshno.de/

(js wird dabei nur zum scrollen und für den focus auf die Eingabezeile benutzt)

Mit Ajax und HTTP-Request Objekt könnte das eventuell noch eleganter werden.
 
ABER:

Browser UND Script laufen "endlos" ...
BIS der Server das Script stoppt ... was auch ganz sicher passieren wird, wenn Du das Teil auf Reseller-Servern laufen lässt. Und wenn du nen eigenen Root-Server hast, glaube ich nicht, dass Du die php.ini (vielleicht auch apache conf) so anpassen möchtest, dass Deine Scripte endlos laufen dürfen ....

Der Browser dürfte auch mal irgendwann "ENDE" sagen :)

Also wie gesagt, in der Theorie möglich, aber nicht im Sinne der vorhandenen Technik ;)

Gruß tyg3r
 

Neue Beiträge

Zurück