基本说明
友情提示:这个ChannelHandler就是我们自己写的handler自定义的,用来处理业务逻辑,我们写的都是extends SimpleChannelInboundHandler,他是ChannelInboundHandler的子类,专门处理入栈的,同理也有写出栈的
友情提示:处理业务,要出栈都是出栈的handler,要是入栈都是入栈。
编码解码器
友情提示:为什么后面介绍的粘包问题可以用编码器+协议解决,编码器可以根据协议进行数据的处理,拆分一个完整的包数据。比如:定义一个协议,每个完整的数据以换行为一个完整的包。
接下来通过编码器和解码器根据协议拆分完整的数据包。
解码器-ByteToMessageDecoder
一个关于ByteToMessageDecoder实例分析
代码需求:
使用自定义的编码器和解码器来
说明Netty的handler 调用机制
客户端发送long -> 服务器
服务端发送long -> 客户
友情提示:
1、从下图可以看出ChannelPipeline中包含许多的入栈和出栈的Handler,并且入栈和出栈是一个连续的handler链。
2、不论解码器handler 还是 编码器handler 即接 收的消息类型必须与待处理的消息类型一致, 否则该handler不会被执行
3、在解码器 进行数据解码时,需要判断 缓存 区(ByteBuf)的数据是否足够 ,否则接收到的结果可能和期望的结果不一样。
针对上面的代码需求画出流程图
服务端和客户端都使用了编码和解码器,客户端通过编码器,经过socket到服务端,服务端用解码器,然后经过服务端handler,将消息传递给socket之前先经过编码器,然后客户端通过解码器,对其消息解码