Netty权威指南 第2版学习笔记5——分隔符和定长解码器的应用
来源:互联网 发布:最新淘宝客程序 编辑:程序博客网 时间:2024/05/16 15:08
DelimiterBasedFrameDecoder
以分隔符作为码流结束标识的消息的解码
示例:Echo服务,以$_作为分隔符
EchoServer.java关键代码
@Overridepublic void initChannel(SocketChannel ch) throws Exception{ //创建分隔符缓冲对象ByteBuf,以$_为分隔符 ByteBuf delimiter=Unpooled.copiedBuffer("$_".getBytes()); //1024表示单条消息的最大长度,当达到该长度后仍然没有查找到分隔符 //就抛出TooLongFrameException异常 //第二个参数是分隔符缓冲对象 new DelimiterBasedFrameDecoder(1024,delimiter)); //后续的ChannelHandler接收到的msg对象将会是完整的消息包 ch.pipeline().addLast(new StringDecoder()); //将ByteBuf解码成字符串对象 ch.pipeline().addLast(new EchoServerHandler()); //接收到的msg消息就是解码后的字符串对象}
EchoServerHandler.java 关键代码
@Overridepublic void channelRead(ChannelHandlerContext ctx,Object msg) throws Exception{ String body=(String)msg; System.out.println("This is " + ++counter + " times receive client : [" + body + "]"); body+="$_"; //$_已被过滤掉了,所以这里要拼接上 ByteBuf echo = Unpooled.copiedBuffer(body.getBytes()); ctx.writeAndFlush(echo);}
EchoClient.java 关键代码
@Override public void initChannel(SocketChannel ch) throws Exception{ ByteBuf delimiter=Unpooled.copiedBuffer("$_".getBytes()); ch.pipeline().addLast(new DelimiterBasedFrameDecoder(1024,delimiter)); ch.pipeline().addLast(new StringDecoder()); ch.pipeline().addLast(new EchoClientHandler());}
EchoClientHandler.java 关键代码
@Overridepublic void channelActive(ChannelHandlerContext ctx){ for(int i=0;i<10;i++){ ctx.writeAndFlush(Unpooled.copiedBuffer(ECHOREQ.getBytes())); }}
FixedLengthFrameDecoder应用开发
固定长度解码器,按照指定的长度对消息进行自动解码,开发者不需要考虑TCP的粘包/拆包问题
示例仍是Echo服务
EchoServer.java 关键代码
@Overridepublic void initChannel (SocketChannel ch) throws Exception{ ch.pipeline().addLast(new FixedLengthFrameDecoder(20)); ch.pipeline().addLast(new StringDecoder()); ch.pipeline().addLast(new EchoServerHandler()));}
EchoServerHandler.java 关键代码
@Overridepublic void channelRead(ChannelHandlerContext ctx,Object msg) throws Exception{ System.out.println("Receive client : [" + msg + "]");}
0 0
- Netty权威指南 第2版学习笔记5——分隔符和定长解码器的应用
- 《netty权威指南》5分隔符和定长解码器的应用
- Netty权威指南之分隔符和定长解码器
- Netty分隔符解码器和定长解码器的应用方案
- Netty的分隔符和定长解码器应用
- Netty中分隔符和定长解码器的应用
- 分隔符和定长解码器在netty中的应用
- 八、分隔符和定长解码器的应用(2)
- Netty (四) 分隔符和定长解码器的使用
- [netty]--分隔符解码器DelimiterBasedFrameDecoder和定长解码器FixedLengthFrameDecoder
- 七、分隔符和定长解码器的应用(1)
- Netty权威指南 第2版学习笔记3——Netty NIO开发指南
- netty分割符和定长解码器的应用
- Netty权威指南 第2版学习笔记9——Channel,Unsafe和 AttributeMap
- netty之分隔符和定长解码器解决之道
- Netty学习之旅(三)(分隔符和定长解码器)
- <netty权威指南>笔记-分隔符解码器处理半包问题
- Netty权威指南 第2版学习笔记2——NIO入门
- windows下使用nssm+devpi搭建个人机器使用的pypi源
- CSS3(不断更新中)
- 最新版本mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz[centOS6.3]通用平台二进制版本安装
- 一个对象为nil和一个对象为NULL一样吗?
- 一键重装系统win7教程
- Netty权威指南 第2版学习笔记5——分隔符和定长解码器的应用
- 一个简单的自定义注解的实现
- 使用jaxb完成对象和xml的转换
- 线程中如何更新对话框中的数据
- ContentProvider 问题
- BZOJ 4551 HEOI 2016 树 (并查集)
- 2086: [Poi2010]Blocks
- 安卓studio 打开xml文件没有preview
- Java线程池