本文共 1683 字,大约阅读时间需要 5 分钟。
多规约,即物联网设备的多种数据传输格式,每一种数据格式都会存在一套详细的规约来表述,作为开发人员,我们通过规约的表述,来解析和组装终端所认可的数据——纯粹个人理解。
网关是如何实现多规约呢?标识 | 含义 | 默认值 |
---|---|---|
pId | 规约编号 | 无 |
isBigEndian | 是否为大端模式(0为否,1为是) | 无 |
beginHexVal | 报文第一字节十六进制值,统一为-1 | 无 |
lengthFieldOffset | 长度域偏移量(从左至右,从0开始计数) | 无 |
lengthFieldLength | 长度域本身所占字节长度 | 无 |
isDataLenthIncludeLenthFieldLenth | 长度域表示的字节数是否包含长度域本身 | 无 |
exceptDataLenth | 长度域向右开始,除了长度域表示的字节数,剩余其它数据区字节数 | 无 |
port | 端口号 | 无 |
heartbeat | 心跳周期 | 秒 |
通过在iotGate.conf文件中的protocolType属性后增加相应配置,同一组配置之间逗号分隔,不同配置之间分号分隔!目前这种配置方式确实比较麻烦且容器出错,因此需要仔细一点,等到IOTGateConsole项目开发完成之后,可以通过配置页面完成相应配置,操作将更加容易!——IOTGateConsole项目码云地址为:https://gitee.com/willbeahero/IOTGateConsole
源码中的iotGate.conf文件中,自带了两中规约的匹配规则:控制台多规约分为基础应用和高级应用
基础应用:通过配置定长长度域得各项参数,动态配置IOTGate得多规约支持–开源版已支持 高级应用:通过控制台,自定义长度域解析规则,实现非定长(如MQTT长度域)或有特殊含义长度域得处理!最终可以实现几乎所有物联网规约的全量兼容!——高级功能对于绝大部分学习的同学应该都用不到这些的,如果有该需求的厂家请联系作者,目前这部分代码暂时不开源了,请大家谅解!!可能有的小伙伴会问,为什么需要这么麻烦去实现多规约,我本地使用netty或者用java socket的时候,直接将不同规约的报文传给服务端,服务端也可以正常接收啊?为什么IOTGate还需要我配置这么多东西?
有这种疑问的小伙伴,不妨试着让netty或者java socket的客户端(IOTGate中称之为物理设备)多开几个线程,且每个线程循环向服务端同时发送成百上千报文,观察一下,是不是会出现服务端收到的数据要么是几条相同的报文拼接成得一个长报文,要么收到的数据只有发送报文的一部分根本不是全部报文?这就是所谓的粘包/拆包问题。 配置多规约最主要的目的就是解决粘包和拆包问题,解决这些问题之后,才能保证网关发送到master的每一条报文都是完整的报文!如果上面的你都看完了,那么赶快下载代码运行一下吧,也可以尝试自己创建一种格式的规约,然后通过配置iotGate.conf文件,让IOTGate实现对自己协议的支持!挺有意思的哦O(∩_∩)O
转载地址:http://cpcii.baihongyu.com/