Zum Inhalt

Beispiele

Sammlung vollständiger und funktionaler Beispiele zum Erlernen der Verwendung des Socket.IO-Clients in Go.

🚀 Schnellstart

Alle Beispiele können mit einem einzigen Befehl ausgeführt werden:

cd examples/[beispiel-name]
go run .

📚 Verfügbare Beispiele

1. Basic - Grundlegende Verbindung

Speicherort: examples/basic/

Einfaches Beispiel für Verbindung, Senden und Empfangen von Ereignissen.

Funktionen: - Verbindung zu Socket.IO-Server - Ereignisse an den Server senden - Ereignisse vom Server empfangen - Behandlung von Verbindung und Trennung

Verwendung:

cd examples/basic
go run .

Wichtiger Code:

client := socketio.New("ws://localhost:3000")

client.OnConnect(func() {
    client.Emit("hello", "world")
})

client.On("message", func(data ...interface{}) {
    fmt.Println("Recibido:", data[0])
})


2. Authentication - JWT-Authentifizierung

Speicherort: examples/authentication/

Authentifizierung mit JWT und benutzerdefinierten Headern.

Funktionen: - Authentifizierung mit JWT-Token - Benutzerdefinierte HTTP-Header - Behandlung von Authentifizierungsfehlern - Neuauthentifizierung bei Wiederverbindung

Verwendung:

cd examples/authentication
go run .

Wichtiger Code:

client := socketio.New("ws://localhost:3000", socketio.Options{
    Auth: map[string]interface{}{
        "token": "eyJhbGciOiJIUzI1NiIs...",
    },
    Headers: map[string]string{
        "Authorization": "Bearer token-123",
    },
})


3. Binary - Binäre Ereignisse

Speicherort: examples/binary/

Übertragung von Dateien und binären Daten.

Funktionen: - Hochladen von Dateien (Bilder, PDFs, etc.) - Herunterladen von Dateien - Streaming binärer Daten - Validierung mit Prüfsummen

Verwendung:

cd examples/binary
go run .

Wichtiger Code:

// Datei lesen und senden
imageData, _ := os.ReadFile("photo.jpg")
client.Of("/").EmitBinary("upload", imageData, map[string]interface{}{
    "filename": "photo.jpg",
    "size": len(imageData),
})

// Datei empfangen
client.On("file", func(data ...interface{}) {
    binaryData := data[0].([]byte)
    os.WriteFile("downloaded.jpg", binaryData, 0644)
})


4. Chat - Chat-Anwendung

Speicherort: examples/chat/

Echtzeit-Chat mit Räumen und Benutzern.

Funktionen: - Echtzeit-Messaging - Räume (Rooms) - Benutzerbenachrichtigungen (join/leave) - Schreibstatus (Typing)

Verwendung:

cd examples/chat
go run .

Wichtiger Code:

chat := client.Of("/chat")

chat.On("message", func(data ...interface{}) {
    user := data[0].(string)
    msg := data[1].(string)
    fmt.Printf("[%s]: %s\n", user, msg)
})

chat.Emit("join-room", "general")
chat.Emit("message", "juan", "Hola!")


5. Namespaces - Mehrere Namespaces

Speicherort: examples/namespaces/

Verwendung mehrerer Namespaces zur logischen Trennung.

Funktionen: - Standard-Namespace (/) - Benutzerdefinierte Namespaces - Nach Namespace isolierte Ereignisse - Unabhängige Verbindungsbehandlung

Verwendung:

cd examples/namespaces
go run .

Wichtiger Code:

// Standard-Namespace
client.On("global-event", handler)

// Benutzerdefinierte Namespaces
chat := client.Of("/chat")
chat.On("message", chatHandler)

admin := client.Of("/admin")
admin.On("stats", adminHandler)


6. Acknowledgments - Request-Response

Speicherort: examples/acknowledgments/

Request-Response-Muster mit Acknowledgments.

Funktionen: - Senden mit Antwort (ACK) - Timeout für Antworten - Behandlung von Server-Antworten - Synchrones Muster über asynchrone Verbindung

Verwendung:

cd examples/acknowledgments
go run .

Wichtiger Code:

client.EmitWithAck("get-user", func(response ...interface{}) {
    if response == nil {
        fmt.Println("Timeout")
        return
    }

    user := response[0].(map[string]interface{})
    fmt.Println("Usuario:", user["name"])
}, "user-123")


7. Reconnection - Resiliente Wiederverbindung

Speicherort: examples/reconnection/

Erweiterte Behandlung der automatischen Wiederverbindung.

Funktionen: - Automatische Wiederverbindung - Exponentieller Backoff - Status-Resynchronisation - Offline-Warteschlange

Verwendung:

cd examples/reconnection
go run .

Wichtiger Code:

client := socketio.New("ws://localhost:3000", socketio.Options{
    ReconnectAttempts: 10,
    ReconnectDelay:    time.Second,
    ReconnectDelayMax: 5 * time.Second,
})

client.OnReconnectAttempt(func(attempt int) {
    fmt.Printf("Intento #%d\n", attempt)
})

client.OnReconnect(func(attempt int) {
    // Status resynchronisieren
    client.Emit("sync-state", lastState)
})


8. Rooms - Räume und Broadcasting

Speicherort: examples/rooms/

Raumsystem für Gruppen-Messaging.

Funktionen: - Räumen beitreten - Räume verlassen - Broadcasting an spezifischen Raum - Mehrere simultane Räume

Verwendung:

cd examples/rooms
go run .

Wichtiger Code:

client.Emit("join-room", "sala-general")
client.Emit("join-room", "sala-tech")

client.On("room-message", func(data ...interface{}) {
    room := data[0].(string)
    msg := data[1].(string)
    fmt.Printf("[%s] %s\n", room, msg)
})

client.Emit("message-to-room", "sala-tech", "Hola tech!")


🎓 Nach Schwierigkeitsgrad

Einsteiger 🟢

Ideal zum Anfangen:

  1. Basic - Verbindung und grundlegende Ereignisse
  2. Namespaces - Organisation mit Namespaces
  3. Rooms - Räume für Gruppen

Mittelstufe 🟡

Fortgeschrittenere Muster:

  1. Authentication - Sicherheit und Authentifizierung
  2. Acknowledgments - Request-Response-Muster
  3. Reconnection - Netzwerk-Resilienz

Fortgeschritten 🔴

Komplexe Anwendungsfälle:

  1. Binary - Dateiübertragung
  2. Chat - Vollständige End-to-End-Anwendung

🛠️ Anforderungen

Socket.IO-Server

Die meisten Beispiele erfordern einen Socket.IO-Server. Sie können den enthaltenen Testserver oder einen beliebigen Socket.IO v4 Server verwenden.

Option 1: Testserver (Node.js)

# Socket.IO installieren
npm install socket.io

# server.js erstellen
cat > server.js << 'EOF'
const { Server } = require('socket.io');
const io = new Server(3000);

io.on('connection', (socket) => {
  console.log('Cliente conectado');

  socket.on('hello', (data) => {
    console.log('Recibido:', data);
    socket.emit('message', 'Echo: ' + data);
  });
});

console.log('Servidor Socket.IO escuchando en puerto 3000');
EOF

# Ausführen
node server.js

Option 2: Python-Server

pip install python-socketio
python testserver/server.py

📖 Beispielstruktur

Jedes Beispiel enthält:

  • README.md - Beispielspezifische Dokumentation
  • main.go - Hauptcode
  • Kommentare - Detaillierte Erklärungen im Code


💡 Tipps

Mit Verbose ausführen

go run . -v

Mit Race Detector ausführen

go run -race .

Server-URL anpassen

Die meisten Beispiele erlauben die Konfiguration der URL:

# Umgebungsvariable
SERVER_URL=ws://api.example.com go run .

# Oder Code bearbeiten
const serverURL = "ws://localhost:3000"

🤝 Beitragen

Haben Sie ein interessantes Beispiel? Öffnen Sie einen PR oder schlagen Sie eine Idee vor.


📄 Lizenz

Alle Beispiele stehen unter der gleichen MIT-Lizenz des Projekts.