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}`)}}})}})