Ein natives Server-Sent-Event-Modul (SSE) für Adonisjs.
Adonisjs Sender ist ein natives Server-Sent-Event-Modul (SSE) für Adonisjs. Es bietet eine einfache API, um Ereignisse an den Kunden zu senden. Es unterstützt auch Redis als Transportschicht für das Rundfunkveranstalter für mehrere Server oder Instanzen.
Hier sind einige Dinge, die Sie vor der Verwendung dieses Moduls kennen sollten.
Unidirektionale Kommunikation: Die Datenübertragung erfolgt nur von Server zu Client, nicht umgekehrt.
Nur Textdaten: SSE unterstützt nur die Übertragung von Textdaten, binäre Daten können nicht gesendet werden.
HTTP -Protokoll: Das zugrunde liegende Protokoll ist das reguläre HTTP, kein spezielles oder proprietäres Protokoll.
Installation
Verwendung
Kanäle
Kanalnamen
Kanalberechtigung
Synchronisierung
Klingeln
Ereignisse
Installieren Sie das Paket aus der NPM -Registrierung wie folgt:
Knoten Ace adonisjs/Sende hinzufügen
Das Modul enthält eine transmit , mit der Ereignisse an den Client gesendet werden können.
Importieren Sie den Übertrag von '@adonisjs/sende/diensten/main' // überall in deinem codetRansmit.broadcast ('ChannelName', {Benutzername: 'Lanz'}) Kanäle sind eine Möglichkeit, Ereignisse zu gruppieren. Sie können beispielsweise einen Kanal für users und einen anderen für posts haben. Der Kunde kann einen oder mehrere Kanäle abonnieren, um Ereignisse zu erhalten.
Kanälenamen müssen eine Zeichenfolge sein und dürfen keine Sonderzeichen außer / . Im Folgenden finden Sie gültige Kanalnamen.
Sende.Broadcast ('Benutzer', {Benutzername: 'Lanz'}) Sende. Lanz '})Sie können einen Kanal als privat markieren und den Kunden dann autorisieren, ihn zu abonnieren. Die Autorisierung erfolgt mit einer Rückruffunktion.
// start/transmit.tsimport type {httpcontext} aus '@adonisjs/core/http'transmit.authorize <{id: string}> (' Benutzer/: id ', (ctx: httpcontext, {id})
return ctx.auth.user? .id === +id})Notiz
Vergessen Sie nicht, Ihre Datei start/transmit.ts in das preloads der Datei adonisrc.ts zu fügen.
Wenn ein Kunde versucht, einen privaten Kanal zu abonnieren, wird die Rückruffunktion mit den Kanalparameten und dem HTTP -Kontext aufgerufen. Die Rückruffunktion muss einen booleschen Wert zurückgeben, um das Abonnement zuzulassen oder zu verbieten.
Sende unterstützt die Synchronisierung von Ereignissen über mehrere Server oder Instanzen mit einer Transportschicht. Sie können die Synchronisierung aktivieren, indem Sie die Konfiguration ändern und Ihren Treiber verweisen (jetzt ist nur Redis verfügbar).
// config/Sendermit.tsimport env aus '#start/env'import {DefinitionsConfig} von'@adonisjs/transmit'import {redis} aus '@adonisjs/transport/transports'Export default definconfig ({{{{{{{{{{{{{{{{{{{
Transport: {Treiber: Redis ({Host: env.get ('redis_host'), port: env.get ('redis_port'), Passwort: env.get ('redis_password'),}),})
}})Notiz
Stellen Sie sicher, dass ioredis bei der Verwendung des redis -Treibers installiert wird.
Sende unterstützt das Ping des Kunden, um die Verbindung am Leben zu erhalten. Sie können das Pinging aktivieren, indem Sie die Konfiguration ändern.
// config/sendmit.tsimport {definconfig} aus '@adonisjs/transmit'import {redis} aus'@adonisjs/transport/transports'Export Standard Definition Definition ({{{{{{{{{{{{{
pinginterval: '1m',}) Sender verwendet Emitter, um alle Lebenszyklusereignisse auszugeben. Sie können mit der on -Methode auf Ereignisse anhören.
Sende.on ('Connect', ({uid}) => {
console.log (`Connected: $ {uid}`)}) sende.on ('tricnect', ({uid}) => {
console.log ("getrennt: $ {uid}`)}) sende.on ('sendest', ({Kanal}) => {
console.log (`über Channel $ {Channel}`)}) sende.on ('abonnieren', ({UID, Kanal}) => {
console.log (`abonniert $ {uid} bis $ {Channel}`)}) sansmit.on ('Unsubscribing', ({uid, Channel}) => {
console.log (`unauftragter $ {uid} von $ {Channel}`)})