Dokumentation Socket.IO Client für Go¶
Willkommen zur vollständigen Dokumentation des Socket.IO-Clients für Go. Diese Bibliothek bietet eine vollständige Implementierung des Socket.IO v4-Protokolls.
🚀 Schnellstart¶
Sie verwenden diese Bibliothek zum ersten Mal? Beginnen Sie hier:
📘 Schnellstart-Anleitung - Installieren Sie die Bibliothek und erstellen Sie Ihre erste Verbindung in 5 Minuten
client := socketio.New("ws://localhost:3000")
client.OnConnect(func() {
client.Emit("hello", "world")
})
📚 Anleitungen¶
Grundlegende Konzepte¶
- Event-System - Lernen Sie, Events zu senden und zu empfangen, Acknowledgments zu verarbeiten und mit binären Events zu arbeiten
Erste Schritte¶
- Installation - Installation der Bibliothek
- Ihre erste Verbindung - Verbinden und Senden Ihres ersten Events
- Grundlegende Konzepte - Socket, Events, Namespaces und Lebenszyklus
- Basiskonfiguration - Häufig verwendete Konfigurationsoptionen
🔧 API-Referenz¶
Vollständige Dokumentation aller öffentlichen APIs:
Kernkomponenten¶
- Socket - Haupt-Socket.IO-Client
- Erstellung und Konfiguration
- Verbindungsmethoden
- Senden und Empfangen von Events
-
Zustandsverwaltung
-
Namespace - Gemultiplexte Kommunikationskanäle
- Namespace-Verwendung
- Events pro Namespace
-
Kontextisolierung
-
Options - Client-Konfiguration
- Authentifizierung
- Timeouts und Wiederverbindung
- Benutzerdefinierte Header
🎯 Erweiterte Verwendung¶
Erweiterte Patterns und Techniken für komplexe Anwendungsfälle:
- Erweiterte Namespaces
- Namespace-Architektur
- Implementierungsmuster
- Namespace-Manager
-
Dynamische Namespaces
- Request-Response-Pattern
- Timeout-Behandlung
- Mehrere parallele Requests
-
Promise-ähnliche API
- Effiziente Datenübertragung
- Datei-Upload/-Download
- Audio-/Video-Streaming
-
Kompression und Checksummen
- Wiederverbindungskonfiguration
- Exponentielles Backoff
- Zustandssynchronisation
- Offline-Warteschlange
📖 Beispiele nach Anwendungsfall¶
Nach Funktionalität¶
| Anwendungsfall | Beispiel | Dokumentation |
|---|---|---|
| Basisverbindung | examples/basic/ | Schnellstart |
| JWT-Authentifizierung | examples/authentication/ | Options API |
| Echtzeit-Chat | examples/chat/ | Events |
| Mehrere Namespaces | examples/namespaces/ | Erweiterte Namespaces |
| Request-Response | examples/acknowledgments/ | Acknowledgments |
| Dateiübertragung | examples/binary/ | Binäre Events |
| Resiliente Wiederverbindung | examples/reconnection/ | Wiederverbindung |
| Räume und Broadcasting | examples/rooms/ | Namespaces |
Nach Schwierigkeitsgrad¶
Anfänger: - Einfache Verbindung - Events senden und empfangen - Trennungsbehandlung
Fortgeschritten: - Authentifizierung - Acknowledgments - Mehrere Namespaces
Erweitert: - Binäres Streaming - Benutzerdefinierte Wiederverbindung - Offline-Warteschlange
🎓 Rezepte¶
Schnelle Lösungen für häufige Probleme:
Verbindung und Authentifizierung¶
// Verbindung mit JWT-Token
client := socketio.New("ws://api.example.com", socketio.Options{
Auth: map[string]interface{}{
"token": "eyJhbGciOiJIUzI1NiIs...",
},
})
Fehlerbehandlung¶
// Alle möglichen Fehler behandeln
client.OnError(func(err error) {
log.Println("Fehler:", err)
})
client.OnReconnectError(func(err error) {
log.Println("Fehler beim Wiederverbinden:", err)
})
Verbindungsstatus¶
// Status vor dem Senden prüfen
if client.IsConnected() {
client.Emit("event", data)
} else {
log.Println("Nicht verbunden, wird in Warteschlange gestellt...")
}
Request-Response¶
// Daten mit Timeout anfordern
client.EmitWithAck("get-data", func(response ...interface{}) {
if response == nil {
log.Println("Timeout")
return
}
data := response[0]
processData(data)
}, "param")
Mehrere Namespaces¶
// Nach Funktionalität organisieren
chat := client.Of("/chat")
chat.On("message", handleChatMessage)
notifications := client.Of("/notifications")
notifications.On("alert", handleAlert)
🔍 Schnellsuche¶
Nach Methode¶
| Methode | Beschreibung | Dokumentation |
|---|---|---|
New() | Client erstellen | Socket API |
On() | Events empfangen | Socket API |
Emit() | Events senden | Socket API |
EmitWithAck() | Emit mit Antwort | Socket API |
Of() | Namespace abrufen | Socket API |
OnConnect() | Verbindungs-Handler | Socket API |
OnDisconnect() | Trennungs-Handler | Socket API |
Close() | Verbindung schließen | Socket API |
IsConnected() | Status prüfen | Socket API |
Nach Event¶
| Event | Wann wird es ausgelöst | Dokumentation |
|---|---|---|
OnConnect | Bei erfolgreicher Verbindung | Events |
OnDisconnect | Bei Trennung | Events |
OnError | Bei einem Fehler | Events |
OnReconnectAttempt | Vor jedem Wiederverbindungsversuch | Events |
OnReconnect | Bei erfolgreicher Wiederverbindung | Events |
OnReconnectError | Bei fehlgeschlagenem Versuch | Events |
OnReconnectFailed | Nach allen fehlgeschlagenen Versuchen | Events |
Nach Option¶
| Option | Zweck | Dokumentation |
|---|---|---|
Auth | Authentifizierung | Options |
Headers | HTTP-Header | Options |
ReconnectAttempts | Maximale Versuche | Options |
ReconnectDelay | Initiale Verzögerung | Options |
ReconnectDelayMax | Maximale Verzögerung | Options |
Timeout | Verbindungs-Timeout | Options |
AckTimeout | ACK-Timeout | Options |
🛠️ Problembehandlung¶
Häufige Probleme¶
Keine Verbindung möglich: 1. Überprüfen Sie die URL (muss ws:// oder wss:// sein) 2. Stellen Sie sicher, dass der Server läuft 3. Überprüfen Sie Fehlerprotokolle mit OnError()
Events werden nicht empfangen: 1. Stellen Sie sicher, dass der Handler vor der Verbindung registriert wurde 2. Überprüfen Sie den Event-Namen (Groß-/Kleinschreibung beachten) 3. Stellen Sie sicher, dass Sie im richtigen Namespace sind
Timeout bei Acknowledgments: 1. Erhöhen Sie AckTimeout in Options 2. Überprüfen Sie, ob der Server korrekt antwortet 3. Implementieren Sie Retry-Logik
Wiederverbindung schlägt fehl: 1. Überprüfen Sie die Wiederverbindungskonfiguration 2. Prüfen Sie OnReconnectError für den Grund 3. Implementieren Sie Zustandssynchronisation
Debugging¶
// Alle Event-Handler aktivieren
client.OnConnect(func() {
log.Println("[DEBUG] Verbunden")
})
client.OnDisconnect(func(reason string) {
log.Printf("[DEBUG] Getrennt: %s\n", reason)
})
client.OnError(func(err error) {
log.Printf("[DEBUG] Fehler: %v\n", err)
})
client.OnReconnectAttempt(func(attempt int) {
log.Printf("[DEBUG] Wiederverbindung... (#%d)\n", attempt)
})
// Protokollierung aller Events
client.On("*", func(data ...interface{}) {
log.Printf("[DEBUG] Event empfangen: %v\n", data)
})
🤝 Kompatibilität¶
| Socket.IO Server | Engine.IO | Status |
|---|---|---|
| v4.x | v4 | ✅ Vollständig |
| v3.x | v4 | ✅ Vollständig |
| v2.x | v3 | ⚠️ Teilweise |
| v1.x | v2 | ❌ Nicht unterstützt |
📊 Funktionen¶
- ✅ Socket.IO v4-Protokoll
- ✅ Engine.IO v4 mit HTTP-Long-Polling und WebSocket
- ✅ Namespaces für Multiplexing
- ✅ Event-Acknowledgments mit Timeout
- ✅ Übertragung binärer Events
- ✅ Authentifizierung beim Handshake
- ✅ Automatische Wiederverbindung mit exponentiellem Backoff
- ✅ Thread-sicher mit Go-Concurrency-Primitiven
- ✅ Zero Data Races (validiert mit Go Race Detector)
- ✅ Hohe Performance (10.000+ Events/Sekunde)
📝 Versionshinweise¶
v1.0.0 (Aktuell) - Vollständige Implementierung von Socket.IO v4 - Unterstützung für Namespaces und Acknowledgments - Automatische Wiederverbindung - Thread-sicher und produktionsbereit
🔗 Nützliche Links¶
📄 Lizenz¶
MIT License - Siehe LICENSE
Sie haben Fragen? Öffnen Sie ein Issue auf GitHub
Sie haben einen Bug gefunden? Melden Sie das Issue
Sie möchten beitragen? Lesen Sie den Leitfaden für Beiträge