FixedLengthFrameDecoder
是固定长度解码器,它能够按照指定的长度对消息进行自动解码,开发者不需要考虑TCP的粘包/拆包问题。
FixedLengthFrameDecoder
服务端开发
在服务端的ChannelPipeline
中新增FixedLengthFrameDecoder
,长度设置为20
,然后再依次增加字符串解码器和EchoServerHandler
:


利用telnet命令行测试EchoServer
服务端
(1)在【运行】菜单中输入cmd命令,打开命令行窗口。

(2)在命令行中输入“telnet localhost 8080”,通过telnet连接服务端。

(3)输入命令行内容:从头开始自学java welcome to Netty at guangzhou
(4)EchoServer服务端运行结果:

服务端运行结果完全符合预期,FixedLengthFrameDecoder
解码器按照20个字节长度对请求消息进行截取。
总结
DelimiterBasedFrameDecoder
用于对使用分隔符结尾的消息进行自动解码,FixedLengthFrameDecoder
用于对固定长度的消息进行自动解码。
有了上述两种解码器,再结合其他的解码器,如字符串解码器等,可以轻松地完成对很多消息的自动解码,而且不再需要考虑TCP粘包/拆包导致的读半包问题,极大地提升了开发效率。
只要将DelimiterBasedFrameDecoder
或FixedLengthFrameDecoder
添加到对应ChannelPipeline
的起始位即可。
网友评论