最近在面试中遇到这样的问题,在使用netty作为分布式发布容器做接口时如果遇到粘包和拆包的问题怎么解决。这个问题才真正让我考虑起来。于是在网上搜索了很多教程。终于有了点门路头绪,于是写下来,避免忘记。
粘包拆包发生的情况:
1.当客户端发送的内容大于套接字缓冲区的长度时,就会出现拆包。反之容易发生粘包
2.进行MSS大小的TCp分段
3.以太网帧的payload大于MTU的ip分段
解决方法:
1.发送的字节大小是固定长度
2.在包尾添加换行符 LinkBasedFrameDecode
3.使用特定的分隔符进行分隔DelimteBasedFrameDecode
4.将消息分为消息头和消息体,消息头中包含消息总长度
5.更复杂的应用协议。(自定义的高级解码器)
网友评论