Chat in PHP selber mal programmieren
Pit
- php
Hallo,
es gibt ja verschiedene Möglichkeiten um in PHP einen Chat zu programmieren, mir bekannt, hoffentlich lieg' ich richtig, Socket-Funktionen, Shared Memory-funktionen und Queues-Funktionen.
Vielleicht hat ja jemand schon von Euch so seine Erfahrungen.
Gruß Pit
Hallo Pit,
es gibt ja verschiedene Möglichkeiten um in PHP einen Chat
zu programmieren,
Ja, auch in PHP gibt es verschiedene Moeglichkeiten, einen
Chat zu realisieren ;)
mir bekannt, hoffentlich lieg' ich richtig,
Socket-Funktionen, Shared Memory-funktionen und
Queues-Funktionen.
Du hast hier verschiedene Mittel zur IPC (Inter Process
Communication) genannt. Aber mit denen kann man keinen Chat
programmieren. Sicher, man kann sie zur Hilfe nehmen, um
die Chat-Prozesse und den Datenbestand zu synchronisieren,
aber das hat wenig mit dem Chat selber zu tun.
Vielleicht hat ja jemand schon von Euch so seine
Erfahrungen.
Dieses Forum hier ist im Grunde ein 'Chat'. Die Threads sind
verschiedene 'Raeume', die Threads sind die Nachrichten. Im
Hintergrund laeuft ein Server, der alles verwaltet. Man muss
einmal das Prinzip von konkurrierenden Prozessen (sei es nun
in Thread-Form, sei es nun als wirklich verschiedene
Prozesse) verstanden haben, dann ist es eigentlich relativ
einfach. Welches Mittel du jetzt einsetzt ist letztenendes
egal. Du musst es nur wirklich verstanden haben. Gerade bei
PHP-Programmierern (das liegt wohl aber weniger an der
Sprache PHP als viel mehr an dem Clientel) habe ich oft
bemerkt, dass sie eigentlich gar nicht verstehen, was sie da
tun. Und *das* ist bei einem Thema wie IPC toedlich.
Gruesse,
CK
Moin!
es gibt ja verschiedene Möglichkeiten um in PHP einen Chat
zu programmieren,Ja, auch in PHP gibt es verschiedene Moeglichkeiten, einen
Chat zu realisieren ;)
Allerdings ist das zugrundeliegende Protokoll HTTP für einen Chat das ungeeignetste Protokoll, was es gibt. Wenn man aber vernünftige Chat-Protokolle wie IRC benutzt, kann man PHP leider wegwerfen, weil es eben für HTTP erfunden wurde. Die Tatsache, dass PHP sogar IRC-Funktionen mitbringt (die leider einen speziellen Webserver erfordern, der nicht Apache heißt), bedeutet nicht, dass sich HTTP im Allgemeinen und PHP im besonderen für einen Chat eignen.
mir bekannt, hoffentlich lieg' ich richtig,
Socket-Funktionen, Shared Memory-funktionen und
Queues-Funktionen.Du hast hier verschiedene Mittel zur IPC (Inter Process
Communication) genannt. Aber mit denen kann man keinen Chat
programmieren. Sicher, man kann sie zur Hilfe nehmen, um
die Chat-Prozesse und den Datenbestand zu synchronisieren,
aber das hat wenig mit dem Chat selber zu tun.
Ich hab unlängst einen Chat geschrieben, der seine Kommunikation über eine MySQL-Datenbank abwickelt. Aber das Teil ist grausam, weil das Funktionsprinzip grausam ist. Man muß zwingend Frames einsetzen, und man muß ständig das Chatfenster neu laden, was auch dann, wenn niemand etwas sagt, zu ständigem Traffic führt. Über das Verhalten unter Last will ich lieber mal gar nicht spekulieren. Meine Anwendung war ausschließlich für parallele 1:1-Gespräche vorgesehen, da sind die Verhältnisse noch recht übersichtlich. Und es wurde mit maximal zwei parallelen Gesprächen getestet (als Machbarkeitsstudie innerhalb eines größeren Systems also tolerierbar ;) ).
Hallo Sven,
Allerdings ist das zugrundeliegende Protokoll HTTP für
einen Chat das ungeeignetste Protokoll, was es gibt.
Richtig.
Wenn man aber vernünftige Chat-Protokolle wie IRC benutzt,
kann man PHP leider wegwerfen, weil es eben für HTTP
erfunden wurde.
Nicht richtig :)
PHP kann man durchaus auch ausserhalb des Internets anwenden.
Ist zwar sehr umstaendlich, aber es geht.
Ich hab unlängst einen Chat geschrieben, der seine
Kommunikation über eine MySQL-Datenbank abwickelt.
Warum machst du sowas?! *schuettel* Selbst fuer einen
HTTP-basierten Chat gibt es sinnvollere Ansaetze. Man muss
doch nicht *alles* in eine Datenbank packen.
Gruesse,
CK
Moin!
Wenn man aber vernünftige Chat-Protokolle wie IRC benutzt,
kann man PHP leider wegwerfen, weil es eben für HTTP
erfunden wurde.Nicht richtig :)
PHP kann man durchaus auch ausserhalb des Internets anwenden.
Ist zwar sehr umstaendlich, aber es geht.
_Erfunden_ wurde PHP für HTTP. Dass man es auch für andere Dinge verwenden kann, stellt diese Aussage ja gar nicht in Abrede. :)
Ich hab unlängst einen Chat geschrieben, der seine
Kommunikation über eine MySQL-Datenbank abwickelt.Warum machst du sowas?! *schuettel* Selbst fuer einen
HTTP-basierten Chat gibt es sinnvollere Ansaetze. Man muss
doch nicht *alles* in eine Datenbank packen.
1. Die Datenbank war schon da und wurde ohnehin verwandt.
2. Es ging lediglich um eine Machbarkeitsstudie (proof-of-concept)
3. Ich hatte und hätte auch heute noch keine Idee, wie ich mal eben einen Server-Daemon in PHP hätte erstellen können - außerdem wollte ich mit dem Ding auch irgendwann mal fertig werden. Und da nehme ich dann lieber das, was ich kann und was funktioniert, als dass ich mich in entwicklungstechnische Abenteuer stürze, für die ich keine Zeit habe. Ja, das Leben ist hart. :)
Hallo Sven,
_Erfunden_ wurde PHP für HTTP.
Na gut. :)
- Die Datenbank war schon da und wurde ohnehin verwandt.
Na und?
- Es ging lediglich um eine Machbarkeitsstudie
(proof-of-concept)
Keine Ausrede
- Ich hatte und hätte auch heute noch keine Idee, wie ich
mal eben einen Server-Daemon in PHP hätte erstellen können
Das musst du ja gar nicht.
Und da nehme ich dann lieber das, was ich kann und was
funktioniert, als dass ich mich in entwicklungstechnische
Abenteuer stürze, für die ich keine Zeit habe. Ja, das
Leben ist hart. :)
Und eine einfache Datei mit den Beitraegen haette es nicht
getan? Texte in eine DB, dann auch noch eine *MySQL*-DB, die
bekannterweise bei vielen schreibenden Zugriffen Probleme
bekommt. Bei jedem Script-Aufruf (und die sind bei einem Chat
normalerweise sehr haeufig) ein Datenbank-Connect, dazu ein
Select... oh man.
Gruesse,
CK
Moin!
Und da nehme ich dann lieber das, was ich kann und was
funktioniert, als dass ich mich in entwicklungstechnische
Abenteuer stürze, für die ich keine Zeit habe. Ja, das
Leben ist hart. :)Und eine einfache Datei mit den Beitraegen haette es nicht
getan? Texte in eine DB, dann auch noch eine *MySQL*-DB, die
bekannterweise bei vielen schreibenden Zugriffen Probleme
bekommt. Bei jedem Script-Aufruf (und die sind bei einem Chat
normalerweise sehr haeufig) ein Datenbank-Connect, dazu ein
Select... oh man.
Dass der Implementation eine gewisse Schönheit abgeht, bestreite ich ja gar nicht. Aber ich hatte unter wenig mehr als Null-Last auf einem Pentium 166 MMX keine MySQL-Probleme, und zu Demonstrations- und Forschungszwecken, bei denen es nicht primär um den Chat ging, reichte mir das.
Hallo!
_Erfunden_ wurde PHP für HTTP. Dass man es auch für andere Dinge verwenden kann, stellt diese Aussage ja gar nicht in Abrede. :)
Wenn ich nicht irre wurde PERL als "Erweiterung" für BASH erfunden, und guck was heute damit gemacht wird!
Grüße
Andreas
Hi Sven,
Ich hab unlängst einen Chat geschrieben, der seine Kommunikation über eine MySQL-Datenbank abwickelt. Aber das Teil ist grausam, weil das Funktionsprinzip grausam ist.
kann ich den Chat erreichen?
Man muß zwingend Frames einsetzen,
warum?
und man muß ständig das Chatfenster neu laden, was auch dann, wenn niemand etwas sagt, zu ständigem Traffic führt. Über das Verhalten unter Last will ich lieber mal gar nicht spekulieren. Meine Anwendung war ausschließlich für parallele 1:1-Gespräche vorgesehen, da sind die Verhältnisse noch recht übersichtlich. Und es wurde mit maximal zwei parallelen Gesprächen getestet (als Machbarkeitsstudie innerhalb eines größeren Systems also tolerierbar ;) ).
Gruss,
Lude
Moin!
Ich hab unlängst einen Chat geschrieben, der seine Kommunikation über eine MySQL-Datenbank abwickelt. Aber das Teil ist grausam, weil das Funktionsprinzip grausam ist.
kann ich den Chat erreichen?
Man muß zwingend Frames einsetzen,
warum?
Ok, man kann auch zwei Browserfenster aufmachen. Das ist aber fast dasselbe. :)
Erklärung:
Der Browsernutzer will üblicherweise relativ zeitnah und vor allem ohne eigene Aktivität die Chat-Äußerungen der anderen Teilnehmer sehen. Zu diesem Zweck ist es notwendig, die Anzeige mit den letzten Äußerungen regelmäßig zu aktualisieren.
Die einzige vernünftig arbeitende Methode dafür ist, in regelmäßigen Abständen die Anzeigeseite neu zu laden. Das geht wahlweise über entsprechende HTTP-Header oder deren Äquivalent in Meta-Tags (Refresh).
Wenn man aber nur ein einziges Browserfenster benutzt, muß zwingenderweise das Eingabefeld für eigene Äußerungen ebenfalls auf dieser Seite untergebracht sein. Wenn man aber unglücklicherweise seinen Satz nur halb eingetippt hat, und die Seite lädt sich neu, bevor man ihn abgeschickt hat, dann ist die Eingabe futsch.
Einzige Lösung: Die zwei Seitenteile in Frames packen.
Zugegeben: Man könnte mit einem aufwendigen Drumherum an Javascript sicherlich noch einiges retten. Beispielsweise onunload die bisherige Eingabe in den Fensternamen retten und onload auf der erneuerten Seite wieder ins Feld hineinschreiben. Aber das halte ich beides für äußerst fragwürdig, zumal man ja üblicherweise auf Javascript nicht zwingend vetrauen darf (jedenfalls war das eine Bedingung bei meiner Entwicklung).
Hi!
Die einzige vernünftig arbeitende Methode dafür ist, in regelmäßigen Abständen die Anzeigeseite neu zu laden. Das geht wahlweise über entsprechende HTTP-Header oder deren Äquivalent in Meta-Tags (Refresh).
Das ist eine abartige Methode, die mich davon bisher abgehalten hat. Ich überlege zwischen 2 Varianten, entweder Flash, udn hier über XML-Sockets(Flash-Datei stell teine eigene persistente Socket-Verbindung her), oder Java, das sollte erheblich besser gehen, aber da habe ich noch keine Ahnung von. auch wenn man Flash nicht mag, es hat eh fast jeder, und alles hat Vor- und Nachteile, nur ist die Refresh-Lösing IMHO keine wirkliche _Lösung_!
Ich hab unlängst einen Chat geschrieben, der seine Kommunikation über eine MySQL-Datenbank abwickelt. Aber das Teil ist grausam, weil das Funktionsprinzip grausam ist.
kann ich den Chat erreichen?
Hi Sven,
klar, der Chatter will auch chatten. Danke für die Erläuterungen. - Kann ich den Chat irgendwo begutachten?
Gruss,
Lude
Moin!
klar, der Chatter will auch chatten. Danke für die Erläuterungen. - Kann ich den Chat irgendwo begutachten?
Nein, der ist nie veröffentlicht worden, sondern liegt auf meinem privaten Entwicklungsserver. Und er wird besser auch nicht veröffentlicht. ;)
Hallo Sven,
Die einzige vernünftig arbeitende Methode dafür ist, in regelmäßigen Abständen die Anzeigeseite neu zu laden. Das geht wahlweise über entsprechende HTTP-Header oder deren Äquivalent in Meta-Tags (Refresh).
Vernünftig ist die Methode schon mal gar nicht. ;)
Aber folgende auch nicht (welche sonst immer verwendet wird): Das PHP-Script für die Ausgabe hört einfach nicht aus, auszugeben und läuft in einer Endlosschleife ab. Klar, das ist auch blöd und überhaupt nicht im Sinne von HTTP, aber immerhin wengier Traffic-Lastig wie Deine Variante. Das wird leider im Buch Webanwendungen mit PHP 4.0 entwickeln von Tobias Ratschiller und Till Gerken als "üblicher Trick, den Sie kennen sollten" beschrieben. (no comment *g*)
Grüße,
Christian