Oliver Hofmann ad0e583a83 README.md
Relativer Pfad
2025-05-12 21:35:22 +02:00
2025-05-12 21:35:22 +02:00
2025-05-12 21:35:22 +02:00
2025-05-12 19:31:33 +02:00
2025-05-12 21:35:22 +02:00

Node WebSocket-Server (HTTP + WS) mit Docker

Dieses Projekt bietet einen einfachen HTTP- und WebSocket-Server in Node.js, der über Docker betrieben wird. Ziel ist es, eine lauffähige, leicht erweiterbare Entwicklungsumgebung bereitzustellen z.B. für WebSocket-basierte Anwendungen.

Der Docker-Container ist so konfiguriert, dass er statische Dateien ausliefert und WebSocket-Verbindungen unterstützt. Es wird ein Reverse-Proxy (Apache) verwendet, um den Container über HTTPS erreichbar zu machen. Dabei wird der Pfad /node verwendet, um den Container zu erreichen.

🔧 Projektstruktur

.
├── Dockerfile
├── package.json
├── volume/
│   ├── server.js         # Hauptserver
│   ├── public/           # Statische Dateien
│   │   ├── index.html
│   │   └── script.js

🚀 Starten der Anwendung

1. Build des Docker-Images

Erfordert Admin-Rechte auf dem Host-System.

docker build -t node-ws-server .

2. Starten des Containers mit Volume-Bindung

Erfordert Admin-Rechte auf dem Host-System.

docker run -v "$PWD/volume":/app/volume node-ws-server

Über den Apache-Reverse-Proxy ist der Server unter

https://medinf.efi.th-nuernberg.de/node

erreichbar gemacht.


🧠 Hinweise zum Reverse Proxy

Der Apache-Webserver leitet Anfragen über /node an den internen Node.js-Server weiter. Damit der Reverse-Proxy funktioniert:

  • Statische Dateien wie script.js müssen in index.html mit relativem Pfad eingebunden werden (z.B. ./script.js), nicht mit /node/script.js.
  • WebSocket-Verbindungen müssen den vollen Proxy-Pfad verwenden, z.B.:
const ws = new WebSocket('wss://medinf.efi.th-nuernberg.de/node/ws');

Apache kümmert sich darum, /node zu entfernen und an den Container weiterzuleiten.


🧠 Funktionsweise von server.js

1. Statische Datei-Auslieferung

const server = http.createServer((req, res) => { ... });
  • Liefert Dateien aus dem Verzeichnis volume/public/.
  • Wenn eine Anfrage ein Verzeichnis ist, wird automatisch index.html geladen.
  • HTTP 404 wird zurückgegeben, wenn eine Datei nicht existiert.

🔌 2. WebSocket-Unterstützung

const wss = new WebSocketServer({ noServer: true });
  • WebSocket wird auf /ws unterstützt.
  • Die upgrade-Verbindung wird manuell gehandhabt.
  • Nur WebSocket-Verbindungen auf /ws werden akzeptiert; alles andere wird verworfen.

📁 Beispiel: index.html und script.js

volume/public/index.html

<!DOCTYPE html>
<html>
<head>
    <title>WebSocket Client</title>
</head>
<body>
    <h1>WebSocket Client</h1>
    <input id="message" placeholder="Type a message">
    <button id="send">Send</button>
    <div id="messages"></div>

    <script src="./script.js"></script>
</body>
</html>

volume/public/script.js

const ws = new WebSocket('wss://medinf.efi.th-nuernberg.de/node/ws');

ws.onmessage = (e) => {
    const div = document.createElement('div');
    div.textContent = `Server: ${e.data}`;
    document.getElementById('messages').appendChild(div);
};

document.getElementById('send').onclick = () => {
    const input = document.getElementById('message');
    ws.send(input.value);
    input.value = '';
};

Description
Websockets mit node
Readme 30 KiB
Languages
JavaScript 74.8%
Dockerfile 12.7%
HTML 12.5%