transmit
1.0.0
用於Adonisjs的本機服務器量事件(SSE)模塊。
Adonisjs Transmit是用於Adonisjs的本機服務器量事件(SSE)模塊。它提供了一個簡單的API,將事件發送給客戶端。它還支持Redis作為將事件廣播到多個服務器或實例的傳輸層。
在使用此模塊之前,您應該知道以下幾件事。
單向通信:數據傳輸僅在服務器到客戶端,而不是相反。
僅文本數據: SSE僅支持文本數據的傳輸,無法發送二進制數據。
HTTP協議:使用的基礎協議是常規HTTP,而不是任何特殊或專有協議。
安裝
用法
頻道
頻道名稱
渠道授權
同步
ping
事件
從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/ports',{username', {username:'' lanz'})
您可以將頻道標記為私人,然後授權客戶訂閱。授權是使用回調函數完成的。
// start/transmit.tsimport類型{httpcontext}來自'@adonisjs/core/core/http'transmit.authorize <{id:strig}>('users/:id',(ctx:ctx:httpcontext) 返回ctx.auth.user?.id === +id})
筆記
不要忘記在adonisrc.ts
文件的preloads
數組中添加您的start/transmit.ts
文件。
當客戶端試圖訂閱專用頻道時,請使用通道參數和HTTP上下文調用回調函數。回調函數必須返回布爾值以允許或禁止訂閱。
傳輸使用傳輸層跨多個服務器或實例的同步事件。您可以通過更改配置並引用驅動程序來啟用同步(截至目前,REDIS僅可用)。
// config/transmit.tsimport env來自'#start/env'import {decteConfig}來自'@adonisjs/transmit'import {redis}的{redis}來自'@adonisjs/transmit/transmit/transport/transports'export default defearteconfig ({{ 傳輸:{驅動程序:redis({主機:env.get('redis_host'),端口:env.get('redis_port'),密碼:env.get('redis_password'),}) }}))
筆記
確保在使用redis
驅動程序時安裝ioredis
。
傳輸支持客戶端以保持連接的活力。您可以通過更改配置來啟用Ping。
// config/transmit.tsimport {decteConfig}來自'@adonisjs/transmit'import {redis}來自'@adonisjs/transmit/transmits/transports'export default defeconfig({{{ pinginterval:'1m',})
傳輸使用發射器來散發任何生命週期事件。您可以使用on
方法收聽事件。
transmit.on('connect',({uid})=> { console.log(`連接:$ {uid}`)})transmit.on('disconnect',({uid})=> { console.log(`斷開連接:$ {uid}`)})transmit.on('broadcast',({channel})=> { console.log(```廣播to channel $ {channel}`)})transmit.on('subscribe',({{uid,channel})=> {{ console.log(`訂閱$ {uid} to $ {channel}`)})transmit.on('unsubScribe',({uid,channel})=> {{ console.log(從$ {channel}`)}}})}})