Mapa de uso
Qué peso tiene este paquete dentro del runtime
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
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