Un módulo nativo de Servidor-Sent-Event (SSE) para ADONISJS.
ADONISJS Transmit es un módulo nativo de evento de servidor (SSE) para ADONISJS. Proporciona una API simple para enviar eventos al cliente. También es compatible con Redis como una capa de transporte para eventos de transmisión a múltiples servidores o instancias.
Aquí hay algunas cosas que debe saber antes de usar este módulo.
Comunicación unidireccional: la transmisión de datos ocurre solo de un servidor a otro, no al revés.
Solo datos textuales: SSE solo admite la transmisión de datos textuales, no se pueden enviar datos binarios.
Protocolo HTTP: el protocolo subyacente utilizado es el HTTP regular, no ningún protocolo especial o patentado.
Instalación
Uso
Canales
Nombres de canales
Autorización de canales
Sincronización
Silbido
Eventos
Instale el paquete en el registro NPM de la siguiente manera:
nodo as agregar @adonisjs/transmitir
El módulo expone una instancia transmit , que se puede usar para enviar eventos al cliente.
Importar transmisión desde '@adonisjs/transmit/services/main' // en cualquier lugar de su codeTransmit.Broadcast ('ChannelName', {UserName: 'Lanz'}) Los canales son una forma de agrupar eventos. Por ejemplo, puede tener un canal para users y otro para posts . El cliente puede suscribirse a uno o más canales para recibir eventos.
Los nombres de los canales deben ser una cadena y no deben contener ningún caracteres especiales excepto / . Los siguientes son nombres de canales válidos.
transmit.broadcast ('usuarios', {nombre de usuario: 'lanz'}) transmit.broadcast ('usuarios/1', {nombre de usuario: 'lanz'}) transmit.broadcast ('usuarios/1/publicaciones', {nombre de usuario: '' Lanz '})Puede marcar un canal como privado y luego autorizar al cliente a suscribirse a él. La autorización se realiza utilizando una función de devolución de llamada.
// start/transmit.tsimport type {httpContext} de '@adonisjs/core/http'transmit.authorize <{id: string}> (' users/: id ', (ctx: httpcontext, {id}) => {
return ctx.auth.user ?.id === +id})Nota
No olvide agregar su archivo start/transmit.ts dentro de la matriz preloads del archivo adonisrc.ts .
Cuando un cliente intenta suscribirse a un canal privado, la función de devolución de llamada se invoca con los parámetros del canal y el contexto HTTP. La función de devolución de llamada debe devolver un valor booleano para permitir o no permitir la suscripción.
La transmisión admite eventos de sincronización en múltiples servidores o instancias utilizando una capa de transporte. Puede habilitar la sincronización cambiando la configuración y haciendo referencia a su controlador (solo Redis está disponible a partir de ahora).
// config/transmit.tsimport Env de '#start/env'import {definitivamentefig} de'@adonisjs/transmit'Import {redis} desde '@adonisjs/transmit/transports'Export predeterminado definitivamente definido ({{{
Transport: {Driver: Redis ({host: env.get ('redis_host'), puerto: env.get ('redis_port'), contraseña: env.get ('redis_password'),})
}})Nota
Asegúrese de instalar ioredis cuando use el controlador redis .
Transmit es compatible con ping al cliente para mantener viva la conexión. Puede habilitar pinging cambiando la configuración.
// config/transmit.tsimport {Defineconfig} de '@adonisjs/transmit'Import {redis} de'@adonisjs/transmit/transports'Export predeterminado definitivamente definido ({{
PingInterval: '1m',}) Transmit usa emittery para emitir cualquier evento de ciclo de vida. Puede escuchar eventos utilizando el método on .
transmit.on ('conectar', ({uid}) => {
console.log (`conectado: $ {uid}`)}) transmit.on ('disconnect', ({uid}) => {
console.log (`desconectado: $ {uid}`)}) transmit.on ('broadcast', ({canal}) => {
console.log (`transmitido para canal $ {canal}`)}) transmit.on ('suscribe', ({uid, canal}) => {
console.log (`suscrito $ {uid} a $ {canal}`)}) transmit.on ('unsubscribe', ({uid, canal}) => {
console.log (`no suscrito $ {uid} de $ {canal}`)})