由于TCP存在粘拆包问题,在创建TCP服务或者TCP客户端时需要指定数据包的解析方式. TCP组件会根据解析方式,将收到的TCP数据包解析为完整的数据包,再交给对应的消息协议处理.
目前支持的解析方式:
- 不处理:收到数据包时直接交给消息协议进行处理.
- 分隔符:使用分隔符来处理粘拆包,例如:
\n. - 固定长度:使用固定长度来处理粘拆包.
- 脚本: 通过脚本来自定义处理规则,脚本内置了一个
parser进行处理逻辑定义,例如:
var BytesUtils = org.jetlinks.pro.network.utils.BytesUtils;
parser.fixed(4)//1. 首先读取4个字节
.handler(function(buffer){
var len = BytesUtils.highBytesToInt(buffer.getBytes());//2. 高位在前将4字节转为int,代表接下来数据包的完整长度.
parser.fixed(len);//3. 设置下一步要读取固定长度
})
.handler(function(buffer){
parser.result(buffer.toString("UTF-8"))//4. 设置数据包结果.
.complete(); //5. 完成本次解析,重新回到1开始读取下一个数据包.
});
TCP协议在传输过程中可能出现粘拆包问题,为解决这一问题,需要在创建服务或客户端时指定解析策略。这些策略包括不处理、使用分隔符(如
)、固定长度以及自定义脚本解析。脚本示例中,通过BytesUtils处理4字节长度信息,以确定后续数据包的完整长度,然后读取并转换为字符串结果。
977

被折叠的 条评论
为什么被折叠?



