Modul Native Server-Sent-Event (SSE) untuk AdonISJS.
Adonisjs Transmit adalah modul asli server-sent-event (SSE) untuk AdonisJS. Ini menyediakan API sederhana untuk mengirim acara ke klien. Ini juga mendukung Redis sebagai lapisan transportasi untuk acara penyiaran ke beberapa server atau instance.
Berikut adalah beberapa hal yang harus Anda ketahui sebelum menggunakan modul ini.
Komunikasi searah: Transmisi data hanya terjadi dari server ke klien, bukan sebaliknya.
Data tekstual saja: SSE hanya mendukung transmisi data tekstual, data biner tidak dapat dikirim.
Protokol HTTP: Protokol yang mendasari yang digunakan adalah HTTP biasa, bukan protokol khusus atau hak milik.
Instalasi
Penggunaan
Saluran
Nama saluran
Otorisasi Saluran
Sinkronisasi
Ping
Acara
Instal paket dari registri NPM sebagai berikut:
node ace add @adonisjs/transmit
Modul ini memperlihatkan instance transmit
, yang dapat digunakan untuk mengirim acara ke klien.
Impor Transmit dari '@adonisjs/transmit/services/main' // di mana saja di codetransmit.broadcast Anda ('channelName', {username: 'lanz'})
Saluran adalah cara untuk mengelompokkan acara. Misalnya, Anda dapat memiliki saluran untuk users
dan lainnya untuk posts
. Klien dapat berlangganan satu atau lebih saluran untuk menerima acara.
Nama saluran harus berupa string dan tidak boleh berisi karakter khusus kecuali /
. Berikut ini adalah nama saluran yang valid.
transmit.broadcast ('pengguna', {username: 'lanz'}) transmit.broadcast ('user/1', {username: 'lanz'}) transmit.broadcast ('pengguna/1/posting', {username: ' Lanz '})
Anda dapat menandai saluran sebagai pribadi dan kemudian mengesahkan klien untuk berlangganan. Otorisasi dilakukan dengan menggunakan fungsi panggilan balik.
// mulai/transmit.tsimport type {httpcontext} dari '@@adonisjs/core/http'transmit.authorize <{id: string}> (' users/: id ', (ctx: httpcontext, {id}) => { kembalikan ctx.Auth.user? .id === +id})
Catatan
Jangan lupa untuk menambahkan file start/transmit.ts
Anda di dalam array preloads
dari file adonisrc.ts
.
Ketika klien mencoba berlangganan saluran pribadi, fungsi panggilan balik dipanggil dengan params saluran dan konteks HTTP. Fungsi panggilan balik harus mengembalikan nilai boolean untuk mengizinkan atau melarang langganan.
Mentransmisikan mendukung acara sinkronisasi di beberapa server atau instance menggunakan lapisan transportasi. Anda dapat mengaktifkan sinkronisasi dengan mengubah konfigurasi dan merujuk driver Anda (hanya redis yang tersedia sampai sekarang).
// config/transmit.tsimport env dari '#start/env'import {defineconfig} dari'@adonisjs/transmit'import {redis} dari '@adonisjs/transmit/transport'export default default default ({{{{{{{{{{{{ Transport: {driver: redis ({host: env.get ('redis_host'), port: env.get ('redis_port'), kata sandi: env.get ('redis_password'),})) }})
Catatan
Pastikan untuk menginstal ioredis
saat menggunakan driver redis
.
Mentransmisikan dukungan ping klien untuk menjaga koneksi tetap hidup. Anda dapat mengaktifkan ping dengan mengubah konfigurasi.
// config/transmit.tsimport {Defineconfig} dari '@adonisjs/transmit'import {redis} dari'@adonisjs/transmit/transport'export default default default ({{{{{{{{{{{{{{{ PingInterval: '1m',})
Penggunaan transmit nol untuk memancarkan peristiwa siklus hidup. Anda dapat mendengarkan acara menggunakan metode on
.
transmit.on ('connect', ({uid}) => { console.log (`terhubung: $ {uid}`)}) transmit.on ('Disconnect', ({uid}) => { console.log (`terputus: $ {uid}`)}) transmit.on ('siaran', ({channel}) => { console.log (`disiarkan ke saluran $ {channel}`)}) transmit.on ('berlangganan', ({uid, channel}) => { console.log (`berlangganan $ {uid} ke $ {channel}`)}) transmit.on ('berhenti berlangganan', ({uid, channel}) => { console.log (`tidak berlangganan $ {uid} dari $ {channel}`)})