socket.io. node.js| Realtimeanwendungen ohne Ajax

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • socket.io. node.js| Realtimeanwendungen ohne Ajax

    Hallo Leute, habe heute mal von was "neuem" gehört wozu ich nicht ganz so viele Informationen finde und ich mich frage ob jemand sich damit schoneinmal auseinander gesetzt hat? Falls es das falsche Forum ist bitte moven, man arbeitet ja mit JS und PHP deswegen wusste ich nicht genau wohin.

    Soweit ich weiß, kann man das ganze nutzen um JS nicht nur client sondern auch serverseitig auszuführen, welches den Effekt hat, dass man realtime Anwendungen die man normal mit Ajax und einem Timeout lösen würde (welches aber gut und gerne eine overhead erzeugt, weil der http_header immer mitgesendet wird) mit diesem socket.io lösen kann mit dem es möglich ist, dass der Server nun die Anfrage an den Clienten schickt sobald ein neuer Eintrag in der DB ist und somit sehr viel ressourcen gespart werden. Sehe ich das soweit richtig?

    Gibt es leicht verständliche Tutorials im Netz dazu? Ich finde absolut nicht was es mir relativ gut verständlich macht. Mich würde es interessieren wie man das ganze realisieren kann. Facebook benutzt das ganze ja um einen in realtime über Neuigkeiten zu informieren.

    Ich will jetzt nicht wissen wie Facebook das macht, mich würde nur interessieren wie man überhaupt damit arbeitet. Brauchen tue ich es gerade nicht, aber ich bilde mich gerne weiter.
    • Was muss mein PHP Script machen damit es die Daten empfängt?
    • Wie erstelle ich die Abfrage die der Server abfragen soll und dann an den Clienten schickt?
    • Ist es möglich von Parametern bestimmte Abfragen zu tätigen?

    Sprich wie man es mit GET kennt. Ich öffne z.b. eine Newsseite mit der ID 5. Diese News ist von Menschen kommentierbar, somit möchte ich dann in realtime checken ob neue Kommentar dazugekommen sind irgendwie sowas.

    Baut das ganze System jetzt dadrauf aus, dass es mir bescheid gibt ob es neue Kommentare gibt und ich muss dann checken ob die Kommentare die neu sind auf meinen Newspost passen oder wird das ganze schon mit der Abfrage geregelt, sprich "select * from news where id='5'" oder so in der Art?


    Danke im Vorraus
  • Soweit ich weiß benutzt Facebook Comet als Technik um Nutzer über Neuigkeiten z. B. neue Chatnachrichten zu informieren. Dazu gibt es auch einen schönen Artikel im Wiki: [wiki]AJAX / Comet Chat Tutorial[/wiki]
    Ansonsten wüsste ich auch nicht, wie NodeJS es machen könnte, aber wie immer lasse ich mich gerne eines Besseren belehren.
    Open Source --> Programmieren aus Leidenschaft :!:

    Ich stehe weder für privaten Support per PM noch über einen IM zur Verfügung. Danke.
  • Ahh ich hatte den Wiki Eintrag gar nicht gesehen, danke dafür! Das macht mir schon einiges mehr klar.
    Nur ab Punkt 5. AJAX & Comet komm ich nicht mehr ganz mit. Den Javascriptteil verstehe ich. Nur was das PHP Script macht verstehe ich noch nicht so genau.

    Wofür ist die $timestamp in der Funktion getNewMessagesSince und was für einen Zweck hat der Part "if(rand(1,20) == 5)" Also wieso immer bei 5?



    Und der andere Punkt wäre wie sieht es denn mit der Datenbankbelastung aus, wenn man so einen Chat macht und im Sekundentakt nach neuen Nachrichten abfragt, legt man da sein eigenen Server nicht lahm, wenn genügend Leute im Chat sind?
  • Die If soll nur einen Zufall derstellen, da ja nicht immer neue Nachrichten vorhanden sind
    $timestamp wird übergeben um zb Abfragen nach Zeit zu genieren

    Warum sollte das mehr Probleme machen als ein normaler Chat per Ajax? Hier hast du den Vorteil, das Httpverbindung nur aufgenommen wird, wenn es eine neue Nachricht gibt und nicht unsinnigerweiße auch wenn es keine neuen Nachrichten gibt

    Falls du probleme bekommst musst du sleep eben auf 1-3 Sekunden herhöhen...

    Das ein Chat mit PHP nicht optimal ist, sollte klar sein
    Output Buffering :)
  • Hey Pion, ich danke dir für deine Antwort. Das macht dann natürlich Sinn.


    Das ein PHP Chat nicht optimal ist weiß ich. Es geht auch eher um die ständigen Abfragen der DB. Facebook und ich denke mal Studivz mit seinem Plauderkasten werden über die gleiche Technik arbeiten. Bei ein paar tausend Usern die Online sind zieht das doch trotzdem gut an den Ressourcen der Server oder muss ein SQL Server sowas ab können?


    Ich will ja auch gar kein Chat oder sowas ähnliches schreiben mich interessiert es nur ob es überhaupt einen Sinnvollen Einsatzbereich für diese Technik gibt.
  • Naja Grundlegend egal bei welcher Sache, sei es Chat oder komplexe Internetanwendung ist grundsätzlich immer die Datenbank die Krücke...

    PHP ist da weniger das Problem, einen weiteren Apache hinzuzuschalten ist kinderleicht, das Problem ist wie gesagt die Datenbank, da sie den selben Datenbestand auf jeden anderen Server haben muss

    Das ist bei Seiten wie Facebook ein großer Problem, sie nutzen längst kein Mysql mehr, sondern ihre eigene Datenbanken (in dem Fall Casandra). Mysql ist was Clusterbetrieb/Salve-betrieb betrifft nicht gut.

    Wie das aber mit dem Plauderkastenfunktioniert kann ich dir nicht sagen bzw welche Technik aber sicherlich nicht so wie in unserem Wiki
    Da ist ja auch nicht so das Problem wie in einem Massenchat, da im Plauderkasten immer nur 2 miteinander komunizieren.
    Das einzige was ich dir sagen kann ist das sie Ajax/Js nehmen den dort gibts neben Flash/Silverlight erst recht keine alternativen


    mfg
    Output Buffering :)
  • Der Ansatz von socket.io ist ja schon ziemlich interessant. Es wird ja versucht das bestmöglichste Verfahren aus einer Reihe von Möglichkeiten auszuwählen. Am interessantesten finde ich dabei [wikipedia]WebSockets[/wikipedia]. Allerdings ist die Unterstützung der Browser noch etwas mager :( .

    EDIT:
    Ich sehe gerade, dass es auch Implementierungen in Javascript gibt. Dann wäre es vielleicht schon jetzt eine echte Alternative zu Ajax.
    Open Source --> Programmieren aus Leidenschaft :!:

    Ich stehe weder für privaten Support per PM noch über einen IM zur Verfügung. Danke.
  • Ja die Websockets hab ich auch schon gesichtet, sehr interessant. Zwar bis jetzt noch nicht wirklich als Standard benutzbar, aber sobald die HTML5 fähigen Browser raus kommen denke ich kann man damit gut arbeiten. Chrome kanbn es ja schon und der IE9/ Firefox 4 sollen auch damit umgehen können. Gerade heutzutage geht die Entwicklung ja so schnell wer da auf seinem IE 6 besteht und hängen bleibt dem kann man ja dann auch nicht mehr helfen.

    Nur leider für mich momentan eher uninteressant da man dafür ja ein eigenen Server benötigt und ich wenn nur Webspace habe besitze außer halt auf der localen Testebene.
  • -.- Sry, dass hatte ich übersehen. Aber du könntest, je nachdem wie viel Freiheit dir dein Hoster gibt, versuchen das Programm mit exec() und einem angehängten & probieren. Aber ich weiß nicht, ob du dann dort auf weitere Einschränkungen oder Hindernisse treffen wirst.
    Open Source --> Programmieren aus Leidenschaft :!:

    Ich stehe weder für privaten Support per PM noch über einen IM zur Verfügung. Danke.
  • Hey, macht doch nichts, aber stimmt dadrüber könnte ich es versuchen auszuführen, mal gucken wie viel Freiheiten mir der Hoster lässt. Websockets sind echt nett, da fallen einem ja hunderte Sachen ein die man damit realisieren könnte.

    Alleine nur eine einfache "Hab ich eine neue Nachricht" funktion wäre ja besser damit als immer ein AjaxRequest abzuschicken und nachzufragen. Lohnt sich natürlich eher bei Seiten die keine oder kaum Seitenwechsel haben.