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)

  • 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".

  • 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.