Netty4 TCP协议之自定义解码器,解决分包和粘包
socket流顾名思义它像一种流体,流体的特征是什么?不清楚它的开始和结尾嘛!TCP不了解上层业务数据的具体含义,它只会根据TCP缓冲区的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被TCP拆分成多个包进行发送,也有可能把多个小的包封装成一个大的数据包发送,这就是所谓的TCP粘包和拆包问题。 好,现在我们有这样一个需求,客户端要向服务器发送两条指令分别是: ABCDE FGHIJ 那么最终我们可能会出现以下这四种情况 我们分别收到两条指令 ABCDE ***** FGHIJ 我们也能受到两条指令 ABCDEFG ***** HIJ 我们也能收到两条指令 ABC ***** DEFGHIJ 我们只能收到一条指令 ABCDEFGHIJ 当然我们肯定是希望只出现第一种情况,但是现实并没有这么美好。解决办法。。。 肯定是有的。 两种解决方法 在每发一条指令后我们加一个特殊字符来作为分割位。比如:\r\n但是这样的方式不太好,每次都要每个字节的去寻找这样的结束符,所以性能肯定不会好到哪里去。 第二种方式像下面这样 假如我们定义了一个这样的传输协议 /** * * +--------+----------+-----------+------+----------+ * | 包头 | 一级指令 | 二级指令 | 长度 | 数据 | * +--------+----------+----------+-------+----------+ * | 4byte | […]