โมดูลเซิร์ฟเวอร์-Event-Event (SSE) สำหรับ ADONISJS
Adonisjs Transmit เป็นโมดูลเซิร์ฟเวอร์-Event-Event (SSE) สำหรับ Adonisjs มันมี API ง่าย ๆ ในการส่งเหตุการณ์ไปยังลูกค้า นอกจากนี้ยังรองรับ Redis เป็นเลเยอร์การขนส่งสำหรับกิจกรรมการออกอากาศไปยังเซิร์ฟเวอร์หรืออินสแตนซ์หลายรายการ
นี่คือบางสิ่งที่คุณควรรู้ก่อนใช้โมดูลนี้
การสื่อสารแบบทิศทางเดียว: การส่งข้อมูลเกิดขึ้นจากเซิร์ฟเวอร์ไปยังไคลเอนต์เท่านั้นไม่ใช่วิธีอื่น ๆ
ข้อมูลข้อความเท่านั้น: SSE รองรับการส่งข้อมูลข้อความเท่านั้นข้อมูลไบนารีไม่สามารถส่งได้
โปรโตคอล HTTP: โปรโตคอลพื้นฐานที่ใช้คือ HTTP ปกติไม่ใช่โปรโตคอลพิเศษหรือเป็นกรรมสิทธิ์
การติดตั้ง
การใช้งาน
ช่อง
ชื่อช่อง
การอนุญาตช่องทาง
การซิงค์
ปิง
เหตุการณ์
ติดตั้งแพ็คเกจจากรีจิสทรี NPM ดังนี้:
โหนดเอซเพิ่ม @adonisjs/transmit
โมดูลเปิดเผยอินสแตนซ์ transmit
ซึ่งสามารถใช้ในการส่งเหตุการณ์ไปยังไคลเอนต์
นำเข้าส่งจาก '@adonisjs/transmit/services/main' // ทุกที่ใน codetransmit.broadcast ('channelname', {username: 'lanz'})
ช่องเป็นวิธีการจัดกลุ่มกิจกรรม ตัวอย่างเช่นคุณสามารถมีช่องสำหรับ users
และอีกช่องสำหรับ posts
ลูกค้าสามารถสมัครสมาชิกหนึ่งช่องหรือมากกว่าเพื่อรับกิจกรรม
ชื่อช่องจะต้องเป็นสตริงและต้องไม่มีอักขระพิเศษใด ๆ ยกเว้น /
ต่อไปนี้เป็นชื่อช่องที่ถูกต้อง
transmit.broadcast ('ผู้ใช้', {ชื่อผู้ใช้: 'lanz'}) transmit.broadcast ('ผู้ใช้/1', {ชื่อผู้ใช้: 'lanz'}) transmit.broadcast ('ผู้ใช้/1/โพสต์', {ชื่อผู้ใช้: ' lanz '})
คุณสามารถทำเครื่องหมายช่องเป็นส่วนตัวแล้วอนุญาตให้ลูกค้าสมัครรับข้อมูล การอนุมัติจะดำเนินการโดยใช้ฟังก์ชั่นการโทรกลับ
// start/transmit.tsimport {httpContext} จาก '@adonisjs/core/http'transmit.authorize <{id: string}> (' ผู้ใช้/: id ', (ctx: httpcontext, {id}) => { ส่งคืน ctx.auth.user? .id === +id})
บันทึก
อย่าลืมเพิ่มไฟล์ start/transmit.ts
ของคุณภายในอาร์เรย์ preloads
ของไฟล์ adonisrc.ts
เมื่อไคลเอนต์พยายามสมัครสมาชิกช่องส่วนตัวฟังก์ชันการโทรกลับจะถูกเรียกใช้ด้วยพารามิเตอร์ช่องและบริบท HTTP ฟังก์ชั่นการโทรกลับจะต้องส่งคืนค่าบูลีนเพื่ออนุญาตหรือไม่อนุญาตให้สมัครสมาชิก
การส่งข้อมูลสนับสนุนการซิงค์เหตุการณ์ในหลายเซิร์ฟเวอร์หรืออินสแตนซ์โดยใช้เลเยอร์การขนส่ง คุณสามารถเปิดใช้งานการซิงค์ได้โดยการเปลี่ยนการกำหนดค่าและการอ้างอิงไดรเวอร์ของคุณ (เฉพาะ Redis เท่านั้นที่มีอยู่ในตอนนี้)
// config/transmit.tsimport Env จาก '#start/env'import {defeleconfig} จาก'@adonisjs/transmit'import {redis} จาก '@adonisjs/transmit/transports'export defineconfig ({{ การขนส่ง: {ไดรเวอร์: redis ({โฮสต์: env.get ('redis_host'), พอร์ต: env.get ('redis_port'), รหัสผ่าน: env.get ('redis_password'),}) -
บันทึก
ตรวจสอบให้แน่ใจว่าได้ติดตั้ง ioredis
เมื่อใช้ไดรเวอร์ redis
การส่งข้อมูลรองรับการ ping กับลูกค้าเพื่อให้การเชื่อมต่อยังมีชีวิตอยู่ คุณสามารถเปิดใช้งานการ ping โดยเปลี่ยนการกำหนดค่า
// config/transmit.tsimport {defineconfig} จาก '@adonisjs/transmit'import {redis} จาก'@adonisjs/transmit/transports'export defineconfig ({ pinginterval: '1m',})
Transmit ใช้ emittery เพื่อปล่อยกิจกรรมวงจรชีวิตใด ๆ คุณสามารถฟังเหตุการณ์โดยใช้วิธี on
transmit.on ('Connect', ({uid}) => { console.log (`เชื่อมต่อ: $ {uid}`)}) transmit.on ('disconnect', ({uid}) => { console.log (`disconnected: $ {uid}`)}) transmit.on ('ออกอากาศ', ({channel}) => { console.log (`ออกอากาศไปยังช่อง $ {channel}`)}) transmit.on ('สมัครสมาชิก', ({uid, channel}) => { console.log (`สมัครสมาชิก $ {uid} ถึง $ {channel}`)}) transmit.on ('unsubscribe', ({uid, channel}) => { console.log (`` unsubscribed $ {uid} จาก $ {channel} `)})