Websockets

  • Serverseite ist nicht ohne.
    Es gibt vieles im Netz für Clientside. Ist ja auch einfach -- das de/encode macht ja der Browser.
    Aber Serverside -PHP gibts wenig bis nix (hatte vor nem halben Jahr gesucht).


    Kommt drauf an, was Du Serverside machen willst.


    Das wichtigste ist der Handshake. Ohne dem geht nix.
    Senden darf der Server ohne Maskierung -- eine msg raus schicken ist also einfach.
    Aber alle Client-msgs sind maskiert (Client muss maskieren) -- und die musst Du als Server demaskieren. Und das ist übel.


    Hatte mir das Protokol durch genommen: https://tools.ietf.org/html/rfc6455
    und Socket/Protocol Klassen geschrieben. (Allerdings sind die mir zu "teuer" die rauszurücken :D)
    Evtl .... muss ich mir überegen mach ich die public ... kann ja dann nur besser werden.


    Siehe auch:
    https://github.com/esromneb/ph…aster/websocket.class.php
    https://twistphp.com/docs/module/WebSockets


    Wenn Du Serverside nicht PHP nutzt, könnte es schon was komplettes (ordentliches) geben.


    EDIT:
    wenn nur die Clients miteinander kommunizieren sollen, dann brauchst Du evtl auf dem Server (PHP) nicht demaskieren.
    - client connected zu server (keine maskierung)
    - client started immer zuerst den handshake
    - server antwortet auf handshake


    - client a sendet msg zu client b (über server -- logisch)
    - server bekommt client a msg , sendet weiter an client b (theorethisch ohne demasierung möglich)

  • Danke..
    ne, nachrichten sollen ja auch in einer DB landen, aber könnte ich nicht auch einfach die maskierten daten in die DB speichern und bei anfrage an den CLient weiterleiten?

  • Das kann funktionieren. Hab ich aber nie ausprobiert.
    Du könntest allerdings keine Serverinfos anhängen wie zB Absender oder "hans schrieb: " ...
    Das könntest Du zur Not mit dem Client (JS) machen. Der könnte Absender usw dann aber faken.


    Das größte Problem (fällt mir gerade ein) hättest Du, wenn Du ein Ping/Pong, oder Closing -Frame bekommst ("Control Frames" https://tools.ietf.org/html/rfc6455#page-36).
    Der Typ des Frames steckt im opcode (https://tools.ietf.org/html/rfc6455#page-28 )

    • continuation (es kommen noch mehr frames zu dieser msg)
    • text (test frame)
    • binary (binary frame)
    • close (closing conn -- code [, reason])
    • ping
    • pong


    Also mindestens die solltest Du erkennen, um keine Closing-Frames ect zu speichern / weiter zu leiten.



    Such mal nach "php hybi10" oder "php websocket hybi10 masking".

  • Ich überlege mir node.js einzurichten dafür.. blos hab ich keine ahnug und noch nicht so richtig den Drang danach mich voll in die Materie reinzustürzen :D
    PHP ist nunmal ungeeignet wenn man vorhat mit dem Server einen hochfrequentierten Chat zu betreiben.. xx

  • Wenn es wirklich was Großes werden soll, dann ja -- dann kommt PHP an Grenzen.
    Kommt aber darauf an, wie groß -- hab bei Tests realistische ~2500 msgs in des Sekunde erreicht.
    Das ist eigtl viel. Wenn man aber im Vergleich die ganz Großen nimmt, dann ist das nichts.
    Whatsapp mit über 1 mio offene Sockets auf einerm Server -- man stelle sich vor, nur 1% der Clients würden in einer Sekunde eine msgs senden.


    node.js hab ich auch noch nix gemacht.
    Kann mir aber vorstellen, dass es einfacher ist. Websockets sind da sicherlich einfach zu nutzen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!