PHP Chat mit Observer Pattern

te one

Lt. Commander
Dabei seit
Apr. 2009
Beiträge
1.235
Hallo,

ich habe mir vor kurzem mal die Thematik "Observer Pattern" angeschaut. (Für alle die nicht wissen was das ist: Ein Beobachter meldet sich an einem Gegenstand zB eben einem Chat an und wird bei einer neuen Nachricht benachrichtigt, und holt sich dann die neue Nachricht ab. So muss das Fenster nicht nach einer bestimmten Zeit aktualisiert werden, sondern das geschieht immer nur bei einer Änderung)

Nun wollte ich das ganze in einem Chat umsetzen. Hat hierzu schon jemand etwas Code?
Und zwar sollte irgendwo ein Master-Server laufen der die Nachrichten verwaltet und die Beobachter (Chat-Teilnehmer) benachrichtigt wenn es eine neue Nachricht gibt.
Habe mit Socket noch nichts größeres Programmiert und außerdem habe ich noch die Problematik, dass die Seite sich ja reloaden müsste wenn eine neue Nachricht vorhanden ist (und ein reload nur mit php geht meines Wissens nach nicht?!)

Hab schonmal etwas gegoogelt aber noch nichts passendes gefunden (leider nennt sich der Beobachter-Chat in manchen Computerspielen auch Observer chat....)

mfg
te one
 

cx01

Lt. Junior Grade
Dabei seit
Mai 2010
Beiträge
258
Das Observer Pattern ist erstmal nur eine Art Programmierkonzept. Das ist nicht zwingend erforderlich, um einen Chat zu programmieren. Daher brauchst du dich damit erstmal nicht befassen.
Was willst du denn genau machen? Du willst einen Chat, der im Browser läuft, und in dem man direkt Nachrichten verschicken kann, ohne die Seite neu zu laden? Dann musst du die Client-Seite in Javascript schreiben und brauchst irgendeine Art von Socket-Verbindung (WebSockets, Flash Sockets oder Long Polling).
 

te one

Lt. Commander
Ersteller dieses Themas
Dabei seit
Apr. 2009
Beiträge
1.235
Richtig das ganze sollte im Browser laufen und ohne manuellen Seitenreload funktionieren. Außerdem sollte der Client bei jeder Änderung sofort aktualisiert werden.
 

IceMatrix

Lt. Commander
Dabei seit
Jan. 2008
Beiträge
1.535
Das funktioniert nicht so einfach. Das Observer-Pattern erfordert zwingend eine Kommunikationsmöglichkeit vom Observable-Objekt zum Observer-Objekt. HTTP funktioniert allerdings nur in die entgegengesetzte Richtung.
Als Lösung bleibt nur Polling oder HTTP delayed response (also nen HTTP request, der vom Server verzögert wird bis ein Event eintritt).
 

Funart

Lieutenant
Dabei seit
Feb. 2006
Beiträge
849
Einfach ein simples Ajax polling (wenn es bei HTML und javascript(,php) bleiben soll).
Mittels Post einfach irgend nen form von letzten State an den Server schicken und der Server responded mit den neuen Daten oder nichts falls nichts passiert ist.
Zeitdauer bis es irgendwie funktioniert 15 min.
Ansonsten gibts da ja noch Flash wozu ich aber persönlich ned raten will.
 

mercsen

Lt. Commander
Dabei seit
Apr. 2010
Beiträge
1.641
Du musst halt bedenken das PHP eine script sprache ist und immer nur vom webserver ausgeführt wird wenn ein client nach dem script fragt. Also geht es gar nicht anders als immer nen HTTP request an den server zu schicken, am besten allerdings mit nem timestamp, oder dieses noch besser direkt vom server erzeugen lassen, und dann alles neue rüber zu jagen.
Oder du schreibst dir den Server in Java/ C etc. und machst dann eine Socket Verbindung auf.
 
C

carom

Gast
WebSockets wären die beste Möglichkeit, wenn es denn mehr Unterstützung seitens der Browser gäbe. Die großen Browser sind zwar schon dabei, aber eben erst in den neusten Versionen... kommt also drauf an, ob du das ganze produktiv einsetzen willst oder eher an der Technologie interessiert bist.

Achja, es gibt natürlich auch noch die Flash Sockets, dafür muss beim Anwender aber logischerweise Flash aktiviert sein.
 
Zuletzt bearbeitet:

IceMatrix

Lt. Commander
Dabei seit
Jan. 2008
Beiträge
1.535
WebSocket wird wohl noch auf Jahre hinaus flach fallen. Die absolute Mehrheit der Browser ist leider noch aus der digitalen Steinzeit :(
 
C

carom

Gast
Ja, das wird sich leider nur langsam entwickeln wie alles andere im www-Bereich :/ Aber ich bin schon froh genug, dass Microsoft endlich auf Webentwickler zu geht und wenigstens das alte Sorgenkind IE langsam wegfällt.
 

IceMatrix

Lt. Commander
Dabei seit
Jan. 2008
Beiträge
1.535
Solange überhaupt ein Mensch auf der Welt Microsoft IE verwendet siehts im Web düster aus..
 

mercsen

Lt. Commander
Dabei seit
Apr. 2010
Beiträge
1.641
Da ich absolut gegen veraltete technik bin sperre ich diese konsequent aus, klar kann sich ein Browser leicht als ein anderer ausgeben aber wenn es dann nicht funktioniert ist es selber Schuld, ich würde darauf keine Rücksicht nehmen!
Klar jetzt kann man sagen: Was ist mit großen Firmen wo die Mitarbeiter selber nichts neues Installieren können? Die haben eben pech und müssen bei der Firmenleitung druck machen!
 
Top