Beiträge von werto87

    Hi,


    wie kann ich den idle timeout von websocket Verbindungen in nginx richtig einstellen?

    Der Default-Wert scheint 60 Sekunden zu sein. Wenn ich proxy_read_timeout auf 10 setze, kommt der timeout nach 10 Sekunden – soweit so gut. Wenn ich den proxy_read_timeout auf 300 setze kommt kein timeout nach 300 Sekunden ?(. Ich möchte gerne einstellen können, wann die Verbindung getrennt wird, falls keine Daten übertragen werden.



    Mein System:

    Code
    uname -r

    5.13.7-arch1-1

    Code
    nginx -v

    nginx version: nginx/1.21.1

    Arch basiert auf Arch ;) - ist eine eigenständige Distribution die ohne eine bestehende Basis gebaut wird.

    Dazu gibt es eine tolle Grafik periodic-table-of-distro

    Guck mal bitte, ob die Datei /usr/lib/httpd/modules/mod_proxy_wstunnel.so existiert.


    Code
    ls /usr/lib/httpd/modules/ | grep tunnel

    mod_proxy_wstunnel.so


    Das kann ich auf jeden Fall ausschließen.

    Vielen Dank für die Hilfe! Ich werde es mal mit nginx probieren.

    Ich weiß auch nicht ob das mit dem "ProxyWebsocketIdleTimeout" wirklich das Problem behebt.

    Ich verwende das was mir in apachelounge empfohlen wurde. Das was bei ProxyPass und so steht soll so ähnlich wirken. Mir würde eine Aussage von netcup reichen ob es sein kann das meine idle websocket Verbindung nach 60 Sekunden von netcup getrennt wird. Falls nicht würde ich es mit nginx probieren.

    Hallo m_ueberall,


    Die Existenz von "httpd" oben läßt auf die Verwendung einer Fedora-/RHEL-basierten Distribution schließen, korrekt?

    Ich verwende Archlinux. Leider weiß ich nicht auf was Arch basiert.

    mod_proxy_wstunnel gibt es ab Apache2 v2.4.5; bei einer Debian-/Ubuntu-basierten Distribution mit "Dritt-Repository" von O. Surý ist man hier ggf. auf neuerem Stand:

    Meine Apache version ist:

    Server version: Apache/2.4.48 (Unix)

    Server built: May 28 2021 16:40:47

    Das ist ja mal mega. :thumbup:

    Nutzt du diese API? https://emscripten.org/docs/po…p-sockets-over-websockets

    Danke! Ich nutze websocket-api.

    Code
    a2enmod proxy
    a2enmod proxy_http
    a2enmod proxy_wstunnel

    Die ersten zwei Befehle gehen der dritte nicht.

    Gibt es einen Grund, warum du Apache nutzt?

    Nein es gibt keinen zwingenden Grund warum ich Apache nutze. Ich spiele schon seit einigen Tagen mit dem Gedanken zu wechseln.

    Allerdings hat das mit dem timeout keine hohe Prio. Der Benutzer kann sich notfalls wieder einloggen und kommt dann zurück in die Lobby oder in das Spiel das er gerade gespielt hat.

    Hallo H6G,


    Mir fehlt auch ein bisschen die Beschreibung, was du da eigentlich vor hast.

    Das Serverprogramm, ist das selbstentwickelt?

    Ich habe ein mehrspieler Spiel entwickelt ( client_git und server_git). Es besteht aus einem Client und einem Server (ich spreche im folgenden von Game-Client und Game-Server).

    Der Game-Client ist in c++ entwickelt und wird mit emscripten zu wasm compiliert. Außerdem wird noch etwas javascript und html generiert.

    Wenn der Benutzer auf meine Domain geht dann serviert ihm apache den Game-Client.

    Der Game-Server ist ein "normales" c++ Programm das auf einem Port hört und wartet bis sich der Game-Client verbindet. Wenn sich der Game-Client verbindet, wird die Verbindung zu einer websocket Verbindung aufgewertet "upgraded".

    Damit der Game-Client den Game-Server findet habe ich das mit dem apache ProxyPass gemacht. Das funktioniert auch soweit ganz gut. In meinem Spiel kann es allerdings vorkommen, dass ein Spieler eine Weile, keine Nachricht bekommt und sendet. Nach 60 Sekunden kommt es aber leider zu einem Verbindungsabbruch.


    Und du möchtest mit dem Apache einen Websocket als Proxy anbinden, verstehe ich das richtig?

    Nicht ganz. Das funktioniert bereits nur leider gibt es das Problem mit dem Verbindungsabbruch nach 60 Sendungen, wenn keine Nachricht gesendet oder empfangen wird.

    - Hast du im Apache das Modul proxy_wstunnel geladen?

    Ich weiß es nicht genau ^^.

    Code
    httpd -M | grep "proxy_wstunnel"

    proxy_wstunnel_module (shared)


    Aber wenn ich versuche "ProxyWebsocketIdleTimeout" zu setzen dann kommt eine Fehlermeldung das proxy_wstunnel nicht geladen ist.

    Außerdem gibt

    Code
    a2enmod proxy_wstunnel

    ERROR: Module proxy_wstunnel does not exist!

    zurück.


    - Was macht denn der Client (Webbrowser)? Gibt es dort nicht auch Keepalive Optionen?

    - In einigen Quellen steht auch was davon, dass einige Browser damit Probleme machen und ein Wechsel des Browsers die Probleme löst. Damit könntest du ausschließen, dass der Server das Problem ist.

    Ich schaue mir das mal an und schraube da etwas herum. Es gibt hier das Problem das der Game-Client SharedArrayBuffer verwendet und ich das in Firefox nicht anbekomme. Hinweis ich sende bereits die header:

    Code
    Cross-Origin-Opener-Policy: same-origin
    Cross-Origin-Embedder-Policy: require-corp

    Und es funktioniert zumindest in Chrome.

    Hi,


    die Verbindung zwischen dem Client und Server wird nach einer Minute getrennt wenn keine daten geschickt werden.

    Setup:

    • Virtueller Server (VPS 200 G8)
    • Betriebssystem 5.13.5-arch1-1
    • Server Apache/2.4.48

    httpd config:



    Logs:

    httpd:

    cat /var/log/httpd/access.log:

    "meine ip" - - [04/Aug/2021:19:28:21 +0200] "GET /wss/ HTTP/1.1" 408 - "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36"



    Mein Serverprogramm log:


    echo Exception: stream truncated


    Was muss ich tun damit die Verbindung nicht getrennt wird wenn 1 minute lang keine Daten geschickt werden?