Chat richtig programmieren?

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • Chat richtig programmieren?

    Hi,

    ich brauche eure Meinungen.
    Und zwar möchte ich mehr zur Übung einen Chat erstellen. Hauptsächlich nur 2-Personen-Chats, aber auch Gruppenchats.

    Frage/Problem 1:
    Ist es sinnvoll/möglich, einen AJAX-Chat zu verwenden?

    Frage/Problem 2:
    Möchte das Backend mit PHP möglichst im OOP-Stil gestalten, da ich kompletter OOP-Anfänger bin, wären Tipps nett, wie die einzelnen Funktionen und Klassen am besten zusammengefasst werden können.

    Natürlich nehm ich gern auch andere Vorschläge/Meinungen an ;)

    Danke schonmal
  • Hi,

    da du vor hast das nur zu Übungszweckecken zu erstellen, kannst du das ganze via Ajax machen. Eine elegante Variante wäre Comet, da würdest du dir die ganzen sinnlosen polls sparen.

    Zu Frage 2 kann ich dir empfehlen das ganze erstmal in UML aufzubauen. Planungsarbeit macht keinen Spaß, kann dir am Ende aber viel Zeit und Nerven einsparen und dich vor nervigem Refactoring bewahren.
  • Versteh ich dich richtig: wenn ich das ganze online stellen möchte "müsste" ich den Chat anders programmieren bspw. mit Java?

    Wäre es eine besser Lösung wenn ich (vereinfacht ausgedrückt) eine Textdatei nehme und in diese nur den letzten Timestamp und eine 0 für "Keine neuen Nachrichten" bzw. eine 1 für "neue Nachrichten" schreibe und per JS dann abfrag ob in der Datei eine 1 steht um danach erst eine Anfrage an den Server zu schicken? Oder ist das zuviel Aufwand/unsicher?

    Werd mich auf jeden Fall erstmal mit deinen Tipps beschäftigen, da ich von beidem (peinlicher Weise) noch nie was gehört habe :whistling:
  • freeek wrote:

    Versteh ich dich richtig: wenn ich das ganze online stellen möchte "müsste" ich den Chat anders programmieren bspw. mit Java?

    Nein, musst du nicht.

    freeek wrote:

    Wäre es eine besser Lösung wenn ich (vereinfacht ausgedrückt) eine Textdatei nehme und in diese nur den letzten Timestamp und eine 0 für "Keine neuen Nachrichten" bzw. eine 1 für "neue Nachrichten" schreibe und per JS dann abfrag ob in der Datei eine 1 steht um danach erst eine Anfrage an den Server zu schicken? Oder ist das zuviel Aufwand/unsicher?

    Das würde gehen, wäre jedoch sehr Umständlich. Du kannst per Ajax einfach direkt ein Request an das PHP-Skript schicken, das dir sagt, ob es eine neue Nachricht gibt oder nicht und diese ggf. gleich mitschickt. Schau dir mal JSON an.
  • freeek wrote:

    Versteh ich dich richtig: wenn ich das ganze online stellen möchte "müsste" ich den Chat anders programmieren bspw. mit Java?

    Nein. Die Schwierigkeit bei Ajax ist, dass du alle x Sekunden den Server pollen musst.

    Beispiel:
    10 Leute & du pollst alle 2 Sekunden für neue Nachrichten. Macht pro Minute pro Person = 30 Requests. Multipliziert mit 15 Leuten = 150 Requests pro Minute, nur für das refreshen.

    Deswegen ist der Chat nichts für eine Produktivumgebung.

    Eine Alternative wäre da Comet.

    Ich habe grad gesehen, dass von Torben ein Tutorial existiert.
  • leipsfur wrote:

    Das würde gehen, wäre jedoch sehr Umständlich. Du kannst per Ajax einfach direkt ein Request an das PHP-Skript schicken, das dir sagt, ob es eine neue Nachricht gibt oder nicht und diese ggf. gleich mitschickt. Schau dir mal JSON an.


    So habe ich es bis jetzt immer gemacht, aber wie vince schon geschrieben hat, werden das enorm viele (meistens leere) Anfragen. So könnte man den Server eventuell ein bisschen schonen und die Arbeit mehr auf das JavaScript/JQuery verlagern?
  • freeek wrote:

    leipsfur wrote:

    Das würde gehen, wäre jedoch sehr Umständlich. Du kannst per Ajax einfach direkt ein Request an das PHP-Skript schicken, das dir sagt, ob es eine neue Nachricht gibt oder nicht und diese ggf. gleich mitschickt. Schau dir mal JSON an.


    So habe ich es bis jetzt immer gemacht, aber wie vince schon geschrieben hat, werden das enorm viele (meistens leere) Anfragen. So könnte man den Server eventuell ein bisschen schonen und die Arbeit mehr auf das JavaScript/JQuery verlagern?

    Ja, da hast du allerdings Recht. Dürfte mit vielen Usern sehr lahm werden. Ich würde dann trotzdem etwas mehr als nur 0 oder 1 in diese statische Datei packen. Aber am besten wäre es wie vince es schon mehrfach erwähnt hat, wenn du Comet verwenden würdest.
  • Also wenn du die möglichkeiten hast PHP mittels Konsole zu starten ( mir fallen grad die drei buchstaben nicht ein )

    Löse das doch per Websocket ( Firefox, Chrome unterstützen es schon Opera nach freigabe )
    echtzeitanwendung mittels eines socket lösen. Wobei ich denke das du sowas dann lieber mit anderen sachen lösen solltes.

    Aber ich kann dir nicht genau sagen wie du wegen den handshake der beim Websocket ist das in PHP anstellen sollst.
    Ich habe selber vor den problem gestanden und bin deswegen aus der einfachheit auf NodeJs mit SocketIO umgestiegen.
    Erfahrungen: Web( HTML, CSS, JS, PHP, NODEJS) SOFT( C++, Purebasic)
  • Also wenn du die möglichkeiten hast PHP mittels Konsole zu starten ( mir fallen grad die drei buchstaben nicht ein )


    CLI ???

    Hier mal ein paar Links, eventuell helfen die dir weiter (hatte mich vor ner Stunde* mit dem Thema beschäftigt)

    srchea.com/blog/2011/12/build-…n-using-html5-websockets/
    lemmingzshadow.net/386/php-web…lient-nach-draft-hybi-10/
    github.com/nicokaiser/php-websocket
    stackoverflow.com/questions/6398887/using-php-with-socket-io
    google.de/search?client=opera&…&oe=utf-8&channel=suggest
    github.com/lemmingzshadow/php-websocket
    it-republik.de/php/artikel/Web…tierung-mit-PHP-3816.html
    code.google.com/p/phpws/
    code.google.com/p/phpwebsocket/

    Oder wenn man es "einfach" haben will ...

    pusher.com/

    Hoffe da ist was hilfreiches dabei :)

    Viel Glück
  • Du haust mich grade aus den latschen O.O

    Nun habe ich mich auf NodeJs eingestellt und dachte mir selbst ich bau mein Projekt nun komplett darauf ( abseits von PHP :D auf nach Javascript ) und nun werfen mich die sachen doch etwas wieder nach PHP.

    Torsten du hast gute quellen gefunden und pusher.com ist es auch wert angeschaut zu werden.

    Websocket + Canvas = Browsergame der echtzeit :D
    dann missbrauchen die ganzen firmen vllt nicht mehr so Flash .. und alte Computer kommen auch noch mit :D
    Erfahrungen: Web( HTML, CSS, JS, PHP, NODEJS) SOFT( C++, Purebasic)
  • Danke für die Links, die sehen super aus.

    Habe mich nun ein bisschen reingelesen. Genau sowas hab ich eigentlich gesucht ^^
    Trotzdem muss ich jetzt nochmal nachfragen, schätzungsweise ist es nur ein Verständnisproblem. Meiner Auffassung nach ist die Comet-Programmierung doch genauso ressourcenintensiv wie "normales" Ajax, da ja das Skript im Hintergrund trotzdem im Sekundentakt z.B. eine DB abfragt?!
    Und zweite Frage: Habe jetzt einige Beiträge in denen PHP als Backendsprache heftigst abgelehnt wurde und schon gleich gar nicht in Verbindung mit Apache. Ist das wirklich so schlecht für die Performance?
  • Naja. Also das sollte schon so aufgebaut sein das die Datenbank nicht die ganze Zeit unter Dauerfeuer steht. Bei einem Chat ist das auch gar nicht nötig ...
    Pack dir einfach mal dieses flynsarmy-PHPWebSocket-chat Dingen auf den PC und teste das / schau es dir an.

    Ob PHP jetzt überhaupt nicht dafür geeignet ist kann ich dir leider nicht sagen. Alles eine Frage der Technik. Würdest du jetzt den neuen Facebook Chat bauen würde ich dir sicherlich eine andere Sprache empfehlen. ;)
  • Mit Websockets wäre ich vorsichtig. Schöne Technologie, aber leider noch nicht ausgereift.

    Apache taugt nix? Wo kommen solche Aussagen her? Von einem betrunkenen IIS-Admin? :D

    PHP für ein Chatbackend ungeeignet? 8| Abgesehen von den vielen Flamewars über die Beste Programmiersprache, beschränkt sich die Logik eines Chats auf das absetzen von Select- und Insert-Statements.

    Ich weiß nicht wer dir das erzählt, aber derjenige möchte dir anscheinend nichts gutes :whistling:


    Zu Comet:
    Comet is a web application model in which a long-held HTTP request allows a web server to push data to a browser, without the browser explicitly requesting it.