Biblioteca WebSocket Gorilla para Go (Golang): guía completa

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Gorilla WebSocket: una herramienta potente para tiempo real en Go



En el desarrollo web moderno, la necesidad de intercambiar datos en tiempo real es cada vez más relevante. Ya sea para chats, juegos en línea, monitoreo de servidores o cotizaciones bursátiles — WebSocket es el estándar de facto para la comunicación bidireccional entre cliente y servidor. Para el lenguaje Go (Golang), una de las bibliotecas más populares y estables para trabajar con WebSocket es Gorilla WebSocket.



La biblioteca gorilla/websocket forma parte del ecosistema Gorilla Toolkit, un conjunto de paquetes de alta calidad para desarrollo web en Go. Proporciona un conjunto completo de funciones para crear servidores y clientes WebSocket, soporta todos los protocolos principales (RFC 6455) y se caracteriza por su facilidad de uso.



Características principales de Gorilla WebSocket



  • Soporte completo del protocolo WebSocket — trabajo con tramas de texto y binarias, fragmentación de mensajes, tramas de control (ping/pong).
  • API conveniente — interfaz minimalista con las funciones ReadMessage y WriteMessage.
  • Soporte TLS/SSL — conexiones WebSocket seguras (wss://).
  • Configuración flexible — posibilidad de establecer tiempos de espera, tamaños de búfer, verificar el origen de las solicitudes.
  • Compatibilidad con HTTP — se integra fácilmente con cualquier servidor HTTP de Go (net/http).
  • Trabajo con contextos — soporte para context.Context para la cancelación de operaciones.


Instalación de la biblioteca



Para instalar Gorilla WebSocket, ejecute el comando en la terminal:



go get github.com/gorilla/websocket


Después de esto, agregue la importación en su archivo Go:



import "github.com/gorilla/websocket"


Ejemplo básico de un servidor WebSocket



Consideremos un servidor echo muy simple que acepta conexiones WebSocket y envía de vuelta los mensajes recibidos.



package main

import ( "log" "net/http"

"github.com/gorilla/websocket")

var upgrader = websocket.Upgrader{ CheckOrigin: func(r *http.Request) bool { return true // Permitimos todos los orígenes (para desarrollo) },}

func echoHandler(w http.ResponseWriter, r *http.Request) { conn, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Print("Upgrade failed:", err) return } defer conn.Close()

for { messageType, message, err := conn.ReadMessage() if err != nil { log.Println("Read error:", err) break } log.Printf("Received: %s", message)

if err := conn.WriteMessage(messageType, message); err != nil { log.Println("Write error:", err) break } }}

func main() { http.HandleFunc("/echo", echoHandler) log.Println("Server started on :8080") log.Fatal(http.ListenAndServe(":8080", nil))}


Explicación detallada del código



  1. Upgrader — es una estructura que transforma una solicitud HTTP normal en una conexión WebSocket. En el ejemplo, permitimos solicitudes desde cualquier origen (campo CheckOrigin). En producción, se deben verificar dominios específicos.
  2. Upgrade — el método principal que toma http.ResponseWriter y *http.Request y devuelve *websocket.Conn.
  3. ReadMessage — una llamada bloqueante que espera un nuevo mensaje del cliente. Devuelve el tipo de mensaje (texto o datos binarios) y los datos en sí.
  4. WriteMessage — envía un mensaje de vuelta al cliente. En este caso, simplemente devolvemos lo mismo que recibimos.


Cliente WebSocket (Gorilla)



La biblioteca también permite

Recommendations