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 .
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
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:
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
Und es funktioniert zumindest in Chrome.