xTaskjs 1.0 ya está disponible: cuentas por rol, documentación y una interfaz personalizable.

Paquetes

@xtaskjs/socket-io

Gateways de Socket.IO, decoradores de eventos, servicios realtime inyectables y acoplamiento al servidor gestionado por el ciclo de vida.

npm install @xtaskjs/socket-io socket.io reflect-metadata Ruta del paquete: packages/socket-io

Resumen

Qué controla este paquete en el runtime

Socket.IO integra mensajería realtime en xtaskjs sin salir del modelo de DI y ciclo de vida del framework. Descubre servicios gateway decorados, se conecta al servidor HTTP activo durante app.listen(), expone namespaces y utilidades de broadcast mediante DI y se desmonta limpiamente durante app.close().

Qué ofrece

  • SocketGateway(), OnSocketConnection(), OnSocketDisconnect() y OnSocketEvent() declaran handlers realtime sobre clases @Service() normales.
  • Los valores devueltos se envían automáticamente mediante acknowledgements de Socket.IO cuando el cliente proporciona un callback ack.
  • InjectSocketService(), InjectSocketServer(), InjectSocketNamespace() e InjectSocketLifecycleManager() exponen el runtime mediante DI.
  • SocketIoService puede emitir eventos, listar gateways, inspeccionar namespaces y reutilizar el servidor Socket.IO gestionado por el ciclo de vida.

Cómo encaja

  • Se inicializa automáticamente mediante @xtaskjs/core cuando el paquete está instalado y la aplicación empieza a escuchar sobre un adaptador HTTP.
  • Se conecta al servidor activo detrás de node-http, Express o Fastify sin cambiar los patrones de registro de controladores o servicios.
  • Lo demuestra el ejemplo 23-socket_io_express_app con uniones a salas, acknowledgements y anuncios disparados por HTTP.

Mapa de uso

Qué peso tiene este paquete dentro del runtime

Arranque

4/5

Inyección de dependencias

5/5

Entrega HTTP

4/5

Operaciones

5/5

Integraciones

4/5

Flujo del paquete

Cómo atraviesa este paquete las fases del runtime de xtaskjs

Antes del arranque

Configura los valores por defecto de Socket.IO cuando haga falta y decora servicios gestionados por DI con SocketGateway y decoradores de handlers de socket para que xtaskjs pueda descubrirlos.

Durante app.listen()

La integración resuelve el servidor HTTP activo desde el adaptador seleccionado, crea el servidor Socket.IO, registra tokens de namespace y enlaza los gateways descubiertos.

Durante app.close()

El servidor Socket.IO se cierra antes de desmontar el adaptador HTTP y el contenedor para que namespaces, salas y suscripciones se detengan limpiamente.

Superficie API

Exports representativos del paquete original

Configuración y tokens

  • configureSocketIo
  • getSocketIoConfiguration
  • getSocketIoLifecycleToken
  • getSocketIoServiceToken
  • getSocketIoServerToken
  • getSocketIoNamespaceToken

Gateways e inyectores

  • SocketGateway
  • OnSocketConnection
  • OnSocketDisconnect
  • OnSocketEvent
  • SubscribeMessage
  • InjectSocketService
  • InjectSocketLifecycleManager
  • InjectSocketServer
  • InjectSocketNamespace

Servicio de runtime y tipos

  • SocketIoService
  • SocketIoLifecycleManager
  • initializeSocketIoIntegration
  • shutdownSocketIoIntegration
  • getSocketIoLifecycleManager
  • resetSocketIoIntegration
  • SocketHandlerContext
  • SocketGatewaySummary
  • SocketEmitOptions

Uso

Flujo típico de adopción

1. Configura namespaces por defecto

Llama a configureSocketIo() cuando necesites un namespace por defecto distinto de la raíz o opciones personalizadas del servidor Socket.IO, como CORS y ajustes de transporte.

2. Decora gateways y eventos

Usa SocketGateway sobre una clase @Service() normal y después añade handlers OnSocketConnection, OnSocketDisconnect y OnSocketEvent para cada flujo del namespace.

3. Emite desde el resto de la app

Inyecta SocketIoService, un token de namespace o el servidor bruto cuando controladores y servicios necesiten emitir anuncios o inspeccionar el estado realtime del runtime.

Ejemplo

Fragmento de referencia

Gateway decorado más broadcast desde servicio
import { Service } from "@xtaskjs/core";
import { InjectSocketService, OnSocketEvent, SocketGateway, SocketIoService } from "@xtaskjs/socket-io";

@Service()
@SocketGateway({ namespace: "/chat", group: ["realtime", "chat"] })
export class ChatGateway {
  @OnSocketEvent("chat.message")
  onMessage(payload: { user: string; text: string }, context: { namespace: any; socket: any }) {
    context.namespace.emit("chat.message", {
      ...payload,
      socketId: context.socket.id,
      sentAt: new Date().toISOString(),
    });
    return { ok: true };
  }
}

@Service()
export class AnnouncementService {
  constructor(
    @InjectSocketService()
    private readonly sockets: SocketIoService
  ) {}

  announce(message: string) {
    this.sockets.emit("server.announcement", { message }, { namespace: "/chat", room: "lobby" });
  }
}

Ejemplos

Ejemplos oficiales para revisar después

Ejemplos de referencia: 23-socket_io_express_app

Relacionados

Paquetes que suelen usarse junto a este