PHP Textstream

mille

Erfahrenes Mitglied
Hallo!

Da ich gerade in einem Chat war kam mir der Gedanke, das dies doch ggf. auch mit PHP gehen könnte.
Um theoretisch einen guten Chat zu bauen (Der ohne meta-reload ) muss der Server ja streamen. Sprich wenn ein Text angezeigt wird und von irgend einem User ein neuer Text hinzugefügt wird, muss dieser einfach an das ende der Html angefügt werden ohne die html neuzuladen. Ähnlich einem Webradio, da wird ja auch nicht für jede Sekunde die MP3 vollständig neugeladen ;)

Allerdings geht der Gedanke Chat erstma noch zu weit, ich hab gerade langeweile und wollte man einen Stream ausprobiern. einen Textstream via PHP.
Habt ihr ne Idee mit welchen Modulen/Funktionen das machbar ist?
Ich denke, das es sowas schon gibt ....
 
Hallo!

Und woher soll der Server wissen ob und zu welchem Client er Daten schicken soll?
Die Daten müssen also erst vom Client angefordert werden..... z.b. durch ein Java Applet oder JavaScript.
PHP arbeitet aber nunmal serverseitig.
Ohne clientseitige Anforderung der Daten wird es also nichts.

Ein Radiostream wird auch clientseitig von Server angefordert..... z.b. durch Browser Plugins.

Andernfalls währen wohl auch alle Firewalls der Welt sinnlos, wenn jeder an jeden sein Rechner unaufgefordert Daten schicken könnte.

Gruss Dr Dau
 
nun ja, Dr.Dau,
du has tja recht. Wie würdest du denn so n Chat realisieren?

Nur ein JAvascript tuts ja auch nicht *g*. Und n einfaches anfordern neuer Seiten ist es auch nicht. Möglich sollte es doch aber sein, einen theoretisch richtig guten chat mittels PHP + Javascript-Unterstützung zu basteln. Oder?
 
Is jetz nur so eine Idee, mit PHP kenn ich mich nicht sooo gut aus, insofern ein eher theoretischer Ansatz. Mit PHP kann man meines Wissens Textdaten in Dateien auf dem Server hineinschreiben. Wenn jetzt ein Javascript in der Lage wäre, in regelmäßigen Abständen diese Datei anzufordern und im Falle einer neuen Textzeile den zusätzlichen Inhalt am Client z.B. einem DIV Container oder einer Textbox hinzuzufügen, dann würde das doch zum gewünschten Ergebnis führen, oder? Vielleicht hab ich jetzt da auch einen Denkfehler drin.
Grüße, das Kla4
 
du könntest die sache auch mit ajax angehen und bei jedem abschicken eines neuen textes forderst du über javascript neue nachrichten an.
eine alternative zum abschicken wäre eine funktion, die sich jede X sekunden aufruft und neue daten vom server ließt. so würde der chat sogar ohne reload funktionieren.

Cu Paraman
 
Natürlich geht es nicht allein mit JavaScript.
Ich wollte damit nur klar machen, dass es mit PHP allein nicht realisierbar ist.
Hier spielen also mehrere Komponenten eine Rolle.

Ich persönlich würde mich an so ein Projekt erst gar nicht dran setzen, genauso wenig wie z.b. an ein Forum.
Da greife ich lieber auf fertige Lösungen zurück.
Als kostenlosen Chat würde es z.b. GTChat geben, allerdings läuft dieser nicht mit PHP sondern mit Perl (also CGI)..... dafür basiert die Datenbank aber auf ASCII Dateien.
 
Dr Dau hat gesagt.:
Ich wollte damit nur klar machen, dass es mit PHP allein nicht realisierbar ist.
Was allerdings falsch ist. Server-Push ist auch mit PHP möglich (Pseudocode):
PHP:
<?php

$messages = array();

while (1) {
	if (PeekMessage() != MSG_ABORT) {
		GetMessages(&$messages);
		if (count($messages) > 0) {
			PrintMessages(&$messages);
			flush();
		} else {
			sleep(1);
		}
	} else {
		break;
	}
}

?>
Wie sinnvoll das ganze ist, ist jedoch eine andere Frage.
 
@Matthias, und wie wird weiterer Text an das Script übergeben ohne dieses erneut zu parsen?
Denn dann müsste der Client die Ausgabe ja auch erneut anfordern..... tut er aber nicht, weil der User z.b. nur passiv am Chat teilnimmt..... er betritt den Chatraum, lehnt sich gemütlich zurück und will mal eine halbe Stunde einfach nur mitlesen.
 
Dr Dau hat gesagt.:
@Matthias, und wie wird weiterer Text an das Script übergeben ohne dieses erneut zu parsen?
Das ist ja genau der springende Punkt. Das Script wird pro Chatsession nur einmal geparst – und zwar die ganze Zeit lang. Der Ladevorgang der Seite dauert also ständig an.

Ein kleines Proof of Concept (getestet auf einem Linuxserver und Firefox als Client):
PHP:
<?php

while (1) {
	if (connection_aborted()) break;
	if (rand(0, 5) == 0) {
		echo 'Nachricht<br />'."\n";
	} else {
		echo "\n";
	}
	flush();
	sleep(1);
}

echo 'Ende.';

?>
Probier's einfach aus :)
 
Hey!

Ja so ungefähr dachte ich mir das, wie es der Code suggeriert.

Ich hab den auch ma kurz gespeichert und in mein htdocs verzeichnis geschoben.
Leider läd bei mir die Seite ewig und nichts passiert *g*

Ich hab Notebook (win XP SP2), xampp und firefoxx genutzt.

achja, n chat direkt will ich gar nicht programmiern, ich wollt mich dafür nur einfach mal interessiern - das ghet mir dann doch zu weit *lach*.

mfg =)
 
Zurück