Нативный модуль сервера-EVent (SSE) для Adonisjs.
Передача Adonisjs является собственным модулем сервера-EVent (SSE) для Adonisjs. Он предоставляет простой API для отправки событий клиенту. Он также поддерживает Redis в качестве транспортного слоя для вещания событий на несколько серверов или экземпляров.
Вот несколько вещей, которые вы должны знать, прежде чем использовать этот модуль.
Однонаправленная связь: передача данных происходит только от сервера к клиенту, а не наоборот.
Только текстовые данные: SSE поддерживает только передачу текстовых данных, двоичные данные не могут быть отправлены.
Протокол HTTP: используемый базовый протокол - это обычный HTTP, а не какой -либо особый или запатентованный протокол.
Установка
Использование
Каналы
Имена каналов
Авторизация канала
Синхронизировать
Пинг
События
Установите пакет из реестра NPM следующим образом:
Узел Ace Add @Adonisjs/Transmit
Модуль обнаруживает экземпляр transmit
, который можно использовать для отправки событий клиенту.
импорт передачи с '@adonisjs/transmit/services/main' // в любом месте вашего codetransmit.broadcast ('Channelname', {username: 'lanz'})
Каналы - это способ группировать события. Например, вы можете иметь канал для users
, а другой - для posts
. Клиент может подписаться на один или несколько каналов для получения событий.
Имена каналов должны быть строкой и не должны содержать каких -либо специальных символов, кроме /
. Ниже приведены действительные имена каналов.
Transmit.Broadcast («Пользователи», {userName: 'lanz'}) transmit.broadcast ('users/1', {username: 'lanz'}) transmit.broadcast ('users/1/post', {username: ' lanz '})
Вы можете пометить канал частным, а затем разрешить клиенту подписаться на него. Авторизация выполняется с использованием функции обратного вызова.
// start/transmit.tsimport type {httpcontext} от '@adonisjs/core/http'transmit. вернуть ctx.auth.user? .id === +id})
Примечание
Не забудьте добавить свой файл start/transmit.ts
в массив preloads
файла adonisrc.ts
.
Когда клиент пытается подписаться на частный канал, функция обратного вызова используется с помощью каналов и контекста HTTP. Функция обратного вызова должна вернуть логическое значение, чтобы разрешить или запретить подписку.
Передача поддерживает синхронизацию событий на нескольких серверах или экземплярах, используя транспортный слой. Вы можете включить синхронизацию, изменяя конфигурацию и ссылаясь на ваш драйвер (на данный момент доступен только REDIS).
// config/transmit.simport env из '#start/env'import {defineconfig} от'@adonisjs/anpermit'import {redis} от '@adonisjs/transport/transports'export defaul Транспорт: {Driver: Redis ({host: env.get ('redis_host'), port: env.get ('redis_port'), пароль: env.get ('redis_password'),}) }})
Примечание
Убедитесь, что ioredis
установил при использовании драйвера redis
.
Передача поддерживает пинг клиента, чтобы поддерживать соединение в живых. Вы можете включить пинг, изменив конфигурацию.
// config/transmit.tsimport {depaneconfig} от '@adonisjs/transmit'Import {redis} от'@adonisjs/transmitt/transports'export defaulteconfig ({{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{ pinginterval: '1m',})
Передача использует Emittry для излучения любых событий жизненного цикла. Вы можете прослушать события, используя метод on
.
Transmit.on ('connect', ({uid}) => { console.log (`connected: $ {uid}`)}) transmit.on ('dinnectect', ({uid}) => { console.log (`densuncted: $ {uid}`)}) transmit.on ('broadcast', ({channel}) => { console.log (`транслируется на канал $ {канал}`)}) antramit.on ('specpibe', ({uid, channel}) => { console.log (`подписано $ {uid} на $ {channel}`)}) transmit.on ('unsubscribe', ({uid, channel}) => { console.log (`ensubscrobed $ {uid} из $ {канал}`)})