websocket

package
v0.0.0-...-cf9ec80 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 12, 2026 License: Apache-2.0 Imports: 10 Imported by: 0

Documentation

Overview

Paquete websocket: módulo que gestiona las conexiones WebSocket activas. El Hub es el "registro central" de clientes conectados — equivalente al Gateway de NestJS con @WebSocketGateway pero sin decoradores, todo explícito.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Register

func Register(app *fiber.App, hub *Hub)

RegisterRoutes añade la ruta WebSocket /ws a la app de Fiber.

Types

type Client

type Client struct {
	ID   string          // UUID único asignado al conectarse
	Conn *websocket.Conn // La conexión WebSocket real (leer/escribir mensajes)
}

Client representa una conexión WebSocket activa. Cada cliente que se conecta a /ws crea una instancia de esta struct.

type Hub

type Hub struct {
	// contains filtered or unexported fields
}

Hub mantiene el mapa de todos los clientes conectados. Es un singleton: se crea una vez en main.go y se pasa a las rutas.

¿Por qué RWMutex en vez de Mutex?

  • RLock/RUnlock: múltiples goroutines pueden leer el mapa al mismo tiempo.
  • Lock/Unlock: solo una goroutine puede escribir (conectar/desconectar).

Esto evita bloqueos innecesarios cuando solo se está leyendo (ej: broadcast).

func NewHub

func NewHub(log *zap.Logger) *Hub

NewHub crea e inicializa el Hub. Se llama desde main.go. El map vacío se crea aquí para que nunca sea nil.

func (*Hub) Broadcast

func (h *Hub) Broadcast(senderID string, message []byte)

Broadcast envía un mensaje a todos los clientes conectados EXCEPTO al emisor. Usa RLock() (lectura compartida) porque solo recorre el mapa sin modificarlo.

func (*Hub) Count

func (h *Hub) Count() int

Count devuelve el número de clientes conectados actualmente. Útil para logs y para el endpoint /health si queremos incluirlo.

func (*Hub) Register

func (h *Hub) Register(client *Client)

Register añade un cliente al mapa cuando se conecta. Usa Lock() (escritura exclusiva) porque modifica el mapa.

func (*Hub) Unregister

func (h *Hub) Unregister(clientID string)

Unregister elimina un cliente del mapa cuando se desconecta. También usa Lock() porque modifica el mapa.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL