Zum Inhalt

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

  1. Installation - Installation der Bibliothek
  2. Ihre erste Verbindung - Verbinden und Senden Ihres ersten Events
  3. Grundlegende Konzepte - Socket, Events, Namespaces und Lebenszyklus
  4. 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

  • Acknowledgments

  • Request-Response-Pattern
  • Timeout-Behandlung
  • Mehrere parallele Requests
  • Promise-ähnliche API

  • Binäre Events

  • Effiziente Datenübertragung
  • Datei-Upload/-Download
  • Audio-/Video-Streaming
  • Kompression und Checksummen

  • Automatische Wiederverbindung

  • 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

📄 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