0Pricing
Go Academy · Lección

Uso de gorilla/websocket

Actualice y gestione conexiones

Uso de gorilla/websocket es una lección gratuita de Go Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Go Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Go Academy incluye 4 lecciones en total.

La biblioteca gorilla/websocket

gorilla/websocket es la biblioteca de WebSocket para Go más utilizada. Gestiona el handshake de actualización y proporciona un objeto de conexión para leer y escribir tramas. Instálela con go get github.com/gorilla/websocket.

import "github.com/gorilla/websocket"

El Upgrader

Un Upgrader convierte una solicitud HTTP en una conexión WebSocket. Puede configurar los tamaños de los búferes y una comprobación del origen.

var upgrader = websocket.Upgrader{
    ReadBufferSize:  1024,
    WriteBufferSize: 1024,
}

CheckOrigin y seguridad

De forma predeterminada, el Upgrader rechaza las solicitudes de otros orígenes. Durante el desarrollo puede relajar esta restricción, pero en producción valide el encabezado Origin para evitar el secuestro de WebSocket entre sitios.

upgrader.CheckOrigin = func(r *http.Request) bool {
    return r.Header.Get("Origin") == "https://myapp.com"
}

Actualización en un Handler

Dentro de un http.HandlerFunc, llame a Upgrade. Si la operación tiene éxito, obtendrá un *websocket.Conn.

func wsHandler(w http.ResponseWriter, r *http.Request) {
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        return
    }
    defer conn.Close()
    // read/write loop here
}

Lectura de mensajes

ReadMessage se bloquea hasta que llega una trama y devuelve el tipo de mensaje y los bytes de la carga útil.

mt, data, err := conn.ReadMessage()
if err != nil {
    return // client closed or error
}
fmt.Printf("got %d bytes\n", len(data))
_ = mt

Escritura de mensajes

WriteMessage envía una trama del tipo indicado:

err := conn.WriteMessage(websocket.TextMessage, []byte("hello"))
if err != nil {
    return
}

El bucle de eco

Un ejemplo clásico lee un mensaje y lo escribe de nuevo. El bucle termina cuando Read devuelve un error (el cliente se ha desconectado).

for {
    mt, msg, err := conn.ReadMessage()
    if err != nil {
        break
    }
    conn.WriteMessage(mt, msg)
}

Ayudantes para JSON

gorilla proporciona ReadJSON y WriteJSON para serializar valores de Go directamente a través del socket, lo que resulta práctico para mensajes estructurados. En el código fuente real, el campo de la estructura Msg lleva la etiqueta json:"text".

type Msg struct {
    Text string // tag: json text
}
var m Msg
conn.ReadJSON(&m)
conn.WriteJSON(Msg{Text: "ack"})

Regla de un lector y un escritor

Importante: una sola conexión permite únicamente un lector y un escritor simultáneos. Si varias goroutines escriben, protéjalo con un mutex o canalice las escrituras a través de una sola goroutine (lo veremos en la difusión).

Registro de la ruta

Conecte el handler como cualquier otra ruta HTTP. Los clientes se conectan a ws://host/ws.

http.HandleFunc("/ws", wsHandler)
http.ListenAndServe(":8080", nil)

Ejecutable: analogía de un recorrido de ida y vuelta con JSON

El código de WebSocket necesita la biblioteca externa; este fragmento de la biblioteca estándar imita ReadJSON/WriteJSON al deserializar un mensaje entrante en un mapa y serializar una respuesta.

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    in := []byte("{\"text\":\"ping\"}")
    var m map[string]string
    json.Unmarshal(in, &m)
    reply, _ := json.Marshal(map[string]string{"text": m["text"] + "-ack"})
    fmt.Println(string(reply))
}

Comprobación rápida

Compruebe su comprensión del uso de gorilla/websocket.

Resumen

Ha aprendido a utilizar gorilla/websocket:

  • Un Upgrader realiza el handshake; valide CheckOrigin
  • Upgrade produce un *websocket.Conn
  • Utilice ReadMessage/WriteMessage o los ayudantes de JSON
  • Solo un lector y un escritor por conexión cada vez

Preguntas frecuentes

¿La lección «Uso de gorilla/websocket» es gratis?

Sí — el texto completo de «Uso de gorilla/websocket» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Go Academy, actualiza a CoddyKit PRO. El curso de Go Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Uso de gorilla/websocket»?

Actualice y gestione conexiones Practicas Go Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Go Academy?

No se requiere experiencia previa. Go Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Uso de gorilla/websocket»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Go Academy?

Sí. Cada lección de Go Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Conceptos básicos de WebSocket
  2. Uso de gorilla/websocket
  3. Difusión de mensajes
  4. Gestión de conexiones
← Volver a Go Academy