实现信令传递与解析
Agora.io 提供的 API 是比较基础的,直接发送文本消息或者是图片消息。对于实际作为控制系统的信令系统,显然是无法满足业务需要的,需要根据自己的实际诉求来设计信令。
根据实际的应用场景,你可以根据你的需要来设计信令,比如我一般使用的有两种。
- JSON
- 简单信令
JSON 信令
JSON 信令顾名思义,将信令转换为 JSON 格式,从而方便进行传递和解析,比如,你可以构建这样的函数用于对信令格式化。
function encode(id, cmd) {
return JSON.stringify({
id, cmd
})
}
function decode(data) {
return JSON.parse(data)
}
则在实际的发送信息和接受消息时,就可以这样处理
// 发送信息
channel.sendMessage({ text: encode(userId,"THIS_IS_COMMAND") }).then(() => {
/* 频道消息发送成功的处理逻辑 */
}).catch(error => {
/* 频道消息发送失败的处理逻辑 */
});
// 接收信息
channel.on('ChannelMessage', ({ text }, senderId) => { // text 为收到的频道消息文本,senderId 为发送方的 User ID
const cmd = decode(text)
// 判断 cmd.cmd 来进行操作。
/* 收到频道消息的处理逻辑 */
});
简单信令
JSON 信令很常用,但问题是在信令传递的过程中,会传递一些无用的数据,比如其间的引号等信息。如果希望信令进一步简化,则可以考虑使用简单信令。
简单信令则是使用不同的符号来切割信令,从而实现最大化的利用信令传递的数据空间。
比如,我们可以定义 ,
用于分隔不同的参数;|
用于分隔不同的信令,则我们可以编写这样的函数来构建信令。
function encode(id,cmd){
return cmd + "," + id
}
function decode(cmd){
return cmd.split(",")
}
则你可以使用 THIS_IS_COMMAND,1
来替代 JSON 信令中的 {"cmd":"THIS_IS_COMMAND","id":1}
,大大的减少了需要传递的信令字符,提升系统的运行效率。