Gorilla WebSocket-Bibliothek für Go (Golang)
Gorilla WebSocket ist eine der beliebtesten und stabilsten Bibliotheken für die Arbeit mit dem WebSocket-Protokoll in der Sprache Go (Golang). Sie ist Teil des Gorilla Toolkit-Ökosystems und bietet Entwicklern ein leistungsstarkes, flexibles und effizientes Werkzeug zur Erstellung von Echtzeitanwendungen: Chats, Echtzeitbenachrichtigungen, Online-Spiele, Dashboards und vieles mehr.
Die Bibliothek implementiert vollständig die Spezifikation RFC 6455, unterstützt sowohl die Server- als auch die Client-Seite und verarbeitet automatisch Nachrichtenfragmentierung, Ping/Pong-Mechanismen und Verbindungskontrolle. Gorilla WebSocket ist in reinem Go ohne externe Abhängigkeiten geschrieben, was es leicht und schnell macht.
Hauptfunktionen
- Vollständige Unterstützung des WebSocket-Protokolls (RFC 6455).
- Einfache und intuitive API.
- Unterstützung für Text- und Binärnachrichten.
- Automatische Ping/Pong-Verwaltung zur Aufrechterhaltung der Verbindung.
- Möglichkeit zur Überprüfung des Ursprungs der Anfrage (Origin).
- Unterstützung für Nachrichtenkomprimierung (permessage-deflate).
- Arbeit mit TLS/HTTPS.
- Hohe Leistung und geringer Speicherverbrauch.
Installation
Führen Sie zur Installation der Bibliothek den folgenden Befehl aus:
go get github.com/gorilla/websocketImportieren Sie anschließend das Paket in Ihren Code:
import "github.com/gorilla/websocket"Beispiel für einen WebSocket-Server in Go
Nachfolgend sehen Sie einen einfachen Server, der WebSocket-Verbindungen akzeptiert und empfangene Nachrichten zurücksendet (Echo-Server):
package main
import ( "fmt" "log" "net/http"
"github.com/gorilla/websocket")
var upgrader = websocket.Upgrader{ CheckOrigin: func(r *http.Request) bool { return true // Alle Ursprünge erlauben (für Entwicklung) },}
func echoHandler(w http.ResponseWriter, r *http.Request) { // WebSocket-Verbindung herstellen conn, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Print("Upgrade-Fehler:", err) return } defer conn.Close()
// Endlose Schleife zum Lesen von Nachrichten for { messageType, message, err := conn.ReadMessage() if err != nil { log.Println("Lesefehler:", err) break } log.Printf("Nachricht empfangen: %s", message)
// Nachricht zurücksenden err = conn.WriteMessage(messageType, message) if err != nil { log.Println("Schreibfehler:", err) break } }}
func main() { http.HandleFunc("/echo", echoHandler) fmt.Println("Server gestartet auf :8080") log.Fatal(http.ListenAndServe(":8080", nil))}WebSocket-Client in Go
Beispiel für einen einfachen Client, der eine Verbindung zum Server herstellt und eine Nachricht sendet:
package main
import ( "fmt" "log" "net/url"
"github.com/gorilla/websocket")
func main() { u := url.URL{Scheme: "ws", Host: "localhost:8080", Path: "/echo"} fmt.Printf("Verbinde zu %s", u.String())
conn, _, err := websocket.DefaultDialer.Dial(u.String(), nil) if err != nil { log.Fatal("Verbindungsfehler:", err) } defer conn.Close()
// Textnachricht senden err = conn.WriteMessage(websocket.TextMessage, []byte("Hallo, WebSocket!")) if err != nil { log.Fatal("Sendefehler:", err) }
// Antwort lesen _, message, err := conn.ReadMessage() if err != nil { log.Fatal("Lesefehler:", err) } fmt.Printf("Antwort erhalten: %s", message)}Arbeit mit mehreren Clients (Broadcast)
Für die Erstellung eines Chats oder eines Benachrichtigungssystems ist es oft erforderlich, Nachrichten
Auch in der Bibliothek
Cython für C++: Komplettguide mit Beispielen
Markdown-Verarbeitung in Node.js: Bibliotheken marked, showdown und remarkable
Internationalisierung (i18n) in Java: Vollständiger Leitfaden mit Beispielen
MetricsKit — Swift-App-Überwachung auf iOS/macOS
Resilience4j Java: vollständige Anleitung mit Codebeispielen