不管是服务端仍是客户端,当咱们读取或者发送消息的时候,都须要考虑TCP底层的粘包/拆包机制。 TCP是一个“流”协议,所谓流,就是没有界限的一串数据。TCP底层并不了解上层业务数据的具体含义,他会根据TCP缓冲区的实际状况进行包的划分,因此在业务上认为,一个完整的包可能被TCP拆分红多个包进行发送,也可能把多个小的包封装成一个大的数据包发送,这就是所谓的粘包和拆包问题设计
问题产生的缘由有三个,以下:code
TCP以流的方式进行数据传输,因为底层TCP没法理解上层的业务数据,因此在底层是没法保证数据包不被拆分和重组的,这个问题只能经过上层的应用协议栈设计来解决,上层的应用协议为了对消息进行区分,业界主流的解决方案能够概括以下:接口
Netty对上面的前四种应用作了统一的抽象,提供了Decoder来解决对应的问题,使用起来很是方便。有了这些Decoder,用户不须要对本身读取的报文进行人工解码,也不须要考虑TCP的粘包和拆包。Decoder以下:it
参考文献:《Netty权威指南》sed