Einleitung
Echtzeit-Kommunikation mit WebSockets ist fundamental für Chat-Apps, Live-Dashboards, Multiplayer-Games und Collaboration-Tools. AI hilft bei der Architektur und Implementierung. Hier sind 10 Prompts für WebSocket und Echtzeit-Apps.
Zudem lassen sich die Ergebnisse auch auf andere Projekte übertragen.
Inhaltsverzeichnis
- Prompt 1: WebSocket Server Setup
- Prompt 2: Chat-Anwendung
- Prompt 3: Rooms & Channels
- Prompt 4: Auth & Security
- Prompt 5: Live Dashboard
- Prompt 6: Collaborative Editing
- Prompt 7: Push Notifications
- Prompt 8: Scaling & Redis
- Prompt 9: Reconnection & Offline
- Prompt 10: Echtzeit Testing
- FAQ
Vor allem in der Praxis hat sich dieser Workflow bewährt.
Prompt 1: WebSocket Server Setup
Deshalb lohnt es sich, dieses Thema genauer zu betrachten.
Richte einen WebSocket Server ein:
Stack: [z.B. "Node.js + ws" / "Socket.IO" / "Bun WebSocket"]
Protokoll: [WebSocket nativ / Socket.IO / SSE]
Implementiere:
1. **Server Setup**: WebSocket Server erstellen und starten
2. **Connection Handling**: onopen, onmessage, onclose, onerror
3. **Message Format**: JSON Protocol (type, payload, id)
4. **Broadcast**: Nachricht an alle verbundenen Clients
5. **Binary Data**: ArrayBuffer/Blob für Bilder/Dateien
6. **Heartbeat/Ping-Pong**: Connection alive check (30s Interval)
7. **Client Setup**: Browser WebSocket / Socket.IO Client
8. **Graceful Shutdown**: Alle Clients benachrichtigen bei Server Stop
9. **CORS**: Erlaubte Origins konfigurieren
10. **Logging**: Verbindungen, Messages, Disconnects
Client-Beispiel:
```javascript
const ws = new WebSocket('wss://api.example.com/ws');
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
handleMessage(data);
};
```
Deshalb empfiehlt es sich, den Prompt schrittweise zu verfeinern.
Grundsätzlich empfiehlt es sich, schrittweise vorzugehen.
Prompt 2: Chat-Anwendung
Vor allem für den praktischen Einsatz sind diese Informationen wertvoll.
Baue eine Echtzeit Chat-Anwendung:
Stack: [z.B. "Next.js, Socket.IO, PostgreSQL, Redis"]
Features: [z.B. "Gruppen-Chat, Direct Messages, Typing Indicator"]
Implementiere:
1. **Message Model**: id, text, userId, channelId, timestamp, status
2. **Send Message**: Client → Server → Broadcast an Channel
3. **Message History**: Letzte 50 Messages beim Join laden
4. **Typing Indicator**: "User X schreibt..." (mit Debounce)
5. **Read Receipts**: Gelesen-Status (double checkmarks)
6. **Online Status**: Grüner Punkt für Online-User
7. **Message Reactions**: Emoji Reactions (like Slack)
8. **File Upload**: Bilder und Dateien im Chat teilen
9. **Message Search**: Volltextsuche in Nachrichten
10. **Message Edit/Delete**: Nachträgliches Bearbeiten
UI-Patterns:
- Virtualized Message List (10.000+ Nachrichten)
- Auto-Scroll (aber nicht wenn User hochgescrollt hat)
- Optimistic UI (Message sofort anzeigen)
- Unread Counter Badge
Dementsprechend ist eine manuelle Überprüfung empfehlenswert.
Natürlich kannst du den Ansatz an deine Bedürfnisse anpassen.
Prompt 3: Rooms & Channels
Tatsächlich ist dieser Bereich besonders wichtig für Entwickler.
Implementiere Room/Channel Management für WebSockets:
Use Case: [z.B. "Multi-Room Chat" / "Game Lobbies" / "Support Tickets"]
Implementiere:
1. **Room erstellen**: Neuen Channel/Room mit Metadaten
2. **Room beitreten**: join(roomId) – nur an Room-Mitglieder broadcasten
3. **Room verlassen**: leave(roomId) – Cleanup
4. **Room-Liste**: Verfügbare Rooms mit Online-Count
5. **Private Rooms**: Passwortgeschützt oder Invite-only
6. **Max Participants**: Limit pro Room
7. **Room Admin**: Moderator kann User kicken/bann
8. **Room State**: Shared State der im Room synchronisiert wird
9. **Room Persistence**: Room-Daten in DB speichern
10. **Namespace/Tenant**: Multi-Tenant WebSocket (verschiedene Apps)
Socket.IO Rooms:
```javascript
socket.join('room-123');
io.to('room-123').emit('message', data);
socket.leave('room-123');
```
Ebenfalls sinnvoll ist es, verschiedene Varianten auszuprobieren.
Außerdem profitierst du von einem systematischen Vorgehen.
Prompt 4: Auth & Security
Darüber hinaus bietet dieser Abschnitt konkrete Beispiele und Tipps.
Implementiere Authentifizierung und Security für WebSockets:
Auth-Methode: [JWT / Session / API Key]
Implementiere:
1. **Connection Auth**: Token im Handshake (query param oder header)
2. **Token Validation**: JWT verifizieren bei Connection
3. **Token Refresh**: Token erneuern ohne Reconnect
4. **Per-Message Auth**: Berechtigungsprüfung pro Nachricht
5. **Room Authorization**: Nur berechtigte User im Room
6. **Rate Limiting**: Max. Messages pro Sekunde pro User
7. **Input Sanitization**: XSS Prevention in Messages
8. **Max Message Size**: Limit für Payload-Größe
9. **Connection Limit**: Max. Connections pro IP/User
10. **WSS (TLS)**: Verschlüsselte WebSocket-Verbindungen
Sicherheitschecklist:
- Kein Token in URL (Logs!), preferiere Headers
- Origin-Check (CORS für WebSockets)
- Reconnect mit neuem Token nach Auth-Fehler
- Abuse Detection (Flooding, Spam)
Weiterhin ist es sinnvoll, die Ergebnisse regelmäßig zu überprüfen.
Prompt 5: Live Dashboard
Dennoch solltest du einige Besonderheiten beachten.
Baue ein Live-Dashboard mit Echtzeit-Updates:
Daten: [z.B. "Server Metriken", "Sales Dashboard", "IoT Sensordaten"]
Stack: [z.B. "React, Socket.IO, Chart.js/Recharts"]
Implementiere:
1. **Initial Load**: Historische Daten beim Verbinden laden
2. **Live Updates**: Neue Datenpunkte per WebSocket pushen
3. **Charts**: Line Chart mit Live-Update (letzte 60 Minuten)
4. **KPI Widgets**: Zahlen die sich in Echtzeit aktualisieren
5. **Table**: Live-Tabelle mit neuen Einträgen (highlight)
6. **Throttling**: UI-Updates auf 60fps begrenzen (requestAnimationFrame)
7. **Time Range**: Zwischen Live und historischen Daten wechseln
8. **Aggregation**: Server-seitig aggregieren (nicht Client!)
9. **Alert**: Visueller Alert wenn Threshold überschritten
10. **Multi-Widget Layout**: Drag & Drop Dashboard Builder
Performance:
- Canvas/WebGL für > 10.000 Datenpunkte
- Daten-Buffering: 100ms sammeln, dann rendern
- Web Worker für Datenverarbeitung
Folglich erhältst du mit diesem Ansatz deutlich bessere Resultate.
Tatsächlich zeigt die Praxis, dass dieser Ansatz sehr effektiv ist.
Prompt 6: Collaborative Editing
Grundsätzlich gibt es dabei einige Punkte zu beachten.
Implementiere Collaborative Editing (Google Docs Style):
Feature: [z.B. "Gemeinsames Dokument bearbeiten", "Whiteboard", "Code Editor"]
Stack: [z.B. "React, Yjs/Automerge, WebSocket"]
Implementiere:
1. **CRDT Library**: Yjs oder Automerge für konfliktfreie Sync
2. **Shared Document**: Dokument-State aller User synchron
3. **Cursor Presence**: Zeige Cursor-Position anderer User
4. **Selection Awareness**: Farbige Selection pro User
5. **Undo/Redo**: Individuell pro User (nicht global!)
6. **Offline Support**: Lokal editieren, bei Reconnect mergen
7. **Version History**: Snapshots mit Undo-Möglichkeit
8. **Access Control**: Read-Only vs. Editor Rechte
9. **Performance**: Incremental Updates (nicht ganzes Dokument)
10. **Rich Text**: Tiptap/ProseMirror + Yjs Integration
Architektur:
- Y.js Provider: y-websocket Server
- Awareness Protocol für Presence
- IndexedDB für Offline-Persistence
Insbesondere die Struktur des Prompts ist dabei entscheidend für gute Ergebnisse.
Zusätzlich gibt es einige bewährte Tipps für den Alltag.
Prompt 7: Push Notifications
Weiterhin ist es wichtig, die Grundlagen zu verstehen.
Implementiere ein Echtzeit Notification System:
Kanäle: [In-App / Browser Push / E-Mail / Mobile]
Stack: [z.B. "Node.js, Socket.IO, Redis, Web Push API"]
Implementiere:
1. **In-App Notifications**: Bell Icon mit Counter (Glocke)
2. **Toast/Snackbar**: Temporäre Benachrichtigungen
3. **Notification Types**: Info, Warning, Error, Success
4. **Mark as Read**: Einzeln und "Alle gelesen"
5. **Browser Push**: Web Push API + Service Worker
6. **Notification Preferences**: User wählt was er bekommt
7. **Digest/Batch**: Mehrere Notifications zusammenfassen
8. **Priority System**: Urgent sofort, Normal gebatched
9. **Notification Center**: Alle Notifications in einer Liste
10. **Cross-Tab Sync**: Notification in allen Tabs als gelesen
Backend:
- Event-driven: Events erzeugen Notifications
- Notification Service: Erstellen, speichern, versenden
- Delivery Channels: WebSocket → Push → E-Mail (Fallback)
Außerdem kannst du den Prompt für verschiedene Programmiersprachen anpassen.
Im Grunde sparst du dadurch langfristig viel Zeit.
Prompt 8: Scaling & Redis
Im Folgenden findest du alle wichtigen Details dazu.
Skaliere meine WebSocket-Anwendung:
Aktuell: [z.B. "1 Server, 5.000 gleichzeitige Connections"]
Ziel: [z.B. "100.000+ gleichzeitige Connections"]
Implementiere:
1. **Redis Adapter**: Socket.IO Redis Adapter für Multi-Server
2. **Sticky Sessions**: Load Balancer mit Session Affinity
3. **Redis Pub/Sub**: Events zwischen Server-Instanzen teilen
4. **Horizontal Scaling**: Mehrere WS-Server hinter Load Balancer
5. **Connection Pooling**: Effiziente Connection-Verwaltung
6. **Memory Management**: Daten nicht pro Connection speichern
7. **Cluster Mode**: Node.js Cluster / PM2 Cluster
8. **Kubernetes**: WS-Pods mit HPA (Horizontal Pod Autoscaler)
9. **Monitoring**: Connection Count, Message Rate, Latenz
10. **Stress Testing**: Artillery / k6 für WebSocket Load Tests
Architektur:
```
Client → Nginx (proxy_pass, upgrade) → WS Server 1
→ WS Server 2
→ WS Server 3
↕ Redis Pub/Sub ↕
```
Allerdings gibt es dabei einige Punkte, die du beachten solltest.
Prompt 9: Reconnection & Offline
Zusammenfassend lässt sich sagen, dass dies ein zentraler Aspekt ist.
Implementiere robuste Reconnection und Offline-Support:
Szenario: [z.B. "Mobile App, unzuverlässiges Netzwerk"]
Implementiere:
1. **Auto-Reconnect**: Exponential Backoff (1s, 2s, 4s, 8s, max 30s)
2. **Connection State UI**: Online/Offline/Reconnecting Banner
3. **Message Queue**: Offline-Messages speichern, bei Reconnect senden
4. **Missed Messages**: Server schickt verpasste Messages nach Reconnect
5. **Sequence Numbers**: Lückenlose Nachrichtenfolge sicherstellen
6. **Optimistic Offline**: UI funktioniert auch offline
7. **Conflict Resolution**: Wenn offline-Änderungen kollidieren
8. **Network Detection**: navigator.onLine + Heartbeat
9. **Graceful Degradation**: Fallback zu Polling wenn WS nicht geht
10. **Last-Event-ID**: SSE-Pattern für Resume nach Disconnect
Client-Pattern:
```javascript
socket.on('disconnect', () => {
showReconnectBanner();
queueOutgoingMessages();
});
socket.on('connect', () => {
sendQueuedMessages();
requestMissedEvents(lastEventId);
});
```
Darüber hinaus lässt sich das Beispiel leicht erweitern.
Im Folgenden gehe ich auf die wichtigsten Details ein.
Prompt 10: Echtzeit Testing
Somit kannst du direkt mit der Umsetzung beginnen.
Teste meine Echtzeit-Anwendung:
Stack: [z.B. "Socket.IO, Jest, Playwright"]
Implementiere Tests für:
1. **Unit Tests**: Event Handler isoliert testen
2. **Integration Tests**: Client ↔ Server Kommunikation
3. **Multi-Client Tests**: 2+ Clients gleichzeitig simulieren
4. **Connection Tests**: Connect, Disconnect, Reconnect
5. **Room Tests**: Join, Leave, Broadcast nur an Room
6. **Auth Tests**: Connection ohne Token abgelehnt
7. **Race Condition Tests**: Gleichzeitige Messages / Joins
8. **E2E Tests**: Playwright mit echtem WebSocket (2 Browser)
9. **Load Tests**: Artillery für 10.000+ gleichzeitige Connections
10. **Chaos Tests**: Server Kill, Netzwerk-Unterbrechung
Test Tools:
- socket.io-client für Server Tests
- MockSocket (jest-websocket-mock)
- Artillery für Load Testing
- Playwright für E2E mit mehreren Tabs
Vor allem die detaillierten Anweisungen sorgen für präzisere Ergebnisse.
Ebenfalls empfehlenswert ist eine regelmäßige Überprüfung der Ergebnisse.
FAQ
WebSocket oder Server-Sent Events (SSE)?
Dementsprechend solltest du die folgenden Aspekte kennen.
WebSocket für bidirektionale Kommunikation (Chat, Collaboration). SSE für Server→Client only (Notifications, Live Dashboard). SSE ist einfacher, funktioniert mit HTTP/2, und reconnected automatisch. Für die meisten Dashboards reicht SSE.
Socket.IO oder native WebSocket?
Dabei spielen mehrere Faktoren eine wichtige Rolle.
Socket.IO für Rooms, Auto-Reconnect, Fallback-Transport und Binary Support out-of-the-box. Native WebSocket für minimalen Overhead, wenn du die Features selbst implementieren willst. Für die meisten Projekte ist Socket.IO der schnellere Weg.
Wie viele Connections kann ein Server halten?
Im Grunde vereinfacht dieser Ansatz den gesamten Workflow erheblich.
Ein einzelner Node.js Server kann 50.000-100.000 WebSocket Connections halten (mit wenig Message-Traffic). Begrenzend ist RAM (~1KB pro Connection) und CPU (bei Message-Verarbeitung). Mit Redis Adapter horizontal skalierbar auf Millionen.
Insbesondere für fortgeschrittene Projekte ist das relevant.
Verwandte Artikel:
Zusammenfassend bietet dieser Abschnitt praktische Handlungsempfehlungen.
Zuletzt aktualisiert: März 2026