Netty使用Protobuf进行编解码
来源:互联网 发布:淘宝店铺号在哪里看 编辑:程序博客网 时间:2024/04/30 08:03
一、下载及安装
Protobuf安装包:
https://github.com/google/protobuf/releases/download/v2.6.1/protoc-2.6.1-win32.zip解压即可。
protobuf jar包:
http://repo2.maven.org/maven2/com/google/protobuf/protobuf-java/2.6.1/添加到java项目中
二、编写需要进行编解码的消息实体proto文件及生成对应的java类
1,新建proto文件:在protoc解压目录下找到..\protoc-2.6.1-win32\protoc.exe此文件,在protoc.exe同级目录新建一个目录(本例命名为protobuf),然后在protobuf目录下编写对应的编解码消息实体,本例新建了两个消息实体proto(Header.proto,NettyMessage.proto),具体内容如下:
Header.proto:
packageprotobuf; //该文件所在的文件夹名称
optionjava_package = "com.test.netty.protobuf"; //输出的java包
optionjava_outer_classname = "Header"; //输出的java类名
messageHeaderProto{
optional int32 type=1;//[修饰符][类型][消息项名称]=[唯一标识]
}
NettyMessage.proto:
package protobuf; //该文件所在的文件夹名称
import "protobuf/Header.proto";//导入依赖的proto文件
optionjava_package = "com.test.netty.protobuf"; //输出的java包
option java_outer_classname ="NettyMessage"; //输出的类名
message NettyMessageProto{
requiredHeaderProto header= 1; //required 表示必填
optionalstring body= 2; //optional 表示不必填
}
2,生成对应的java类
打开cmd:进入到protobuf安装包的proto.exe文件的父级目录。
如:D:\software\tool\protoc-2.6.1-win32>
再分别输入命令:
protoc .\protobuf\HeaderProto.proto --java_out .\
protoc .\protobuf\NettyMessageProto.proto – java_out.\
生成对应的java类在protoc.exe的同级目录下。
关于protobuff更多详细指南,请访问http://www.cnblogs.com/dkblog/archive/2012/03/27/2419010.html
三、在netty中使用protobuf.
1,将生成好的java消息类放入netty中,并添加protobuf依赖的jar包。
2,netty客户端构造握手请求编解码示例代码。
public void channelActive(ChannelHandlerContext ctx)throws Exception {
//构造握手请求消息
HeaderProto header =Header.HeaderProto.newBuilder().setType(0).build();
NettyMessageProto reqMessage =NettyMessage.NettyMessageProto.newBuilder().setHeader(header).setBody("hello").build();
ctx.writeAndFlush(reqMessage);
}
3,netty服务端握手响应编解码示例代码。
publicvoid channelRead(ChannelHandlerContext ctx, Object msg)
throws Exception {
NettyMessageProtoreqMessage = (NettyMessageProto) msg;
System.out.println("receivemsg from client:"+reqMessage.getBody());
HeaderProtoheader = Header.HeaderProto.newBuilder().setType(1).build();
NettyMessageProto respMessage =NettyMessage.NettyMessageProto.newBuilder().setHeader(header).setBody("welcome").build();
ctx.writeAndFlush(respMessage);
}
4,netty服务器端及客户端通道中设置protobuf编解码。
//protobuf编解码
ch.pipeline().addLast(newProtobufVarint32FrameDecoder());//编码器,netty框架实现,直接实例化
ch.pipeline().addLast(newProtobufDecoder(NettyMessage.NettyMessageProto.getDefaultInstance()));//netty已实现,只需传入具体的消息实例
ch.pipeline().addLast(newProtobufVarint32LengthFieldPrepender());//转码器,netty框架实现,直接实例化
ch.pipeline().addLast(new ProtobufEncoder());//转码器,netty框架实现,直接实例化
ch.pipeline().addLast(new EchoClientHandler());//业务处理handler
- Netty使用Protobuf进行编解码
- Netty使用google protobuf进行编解码
- Netty系列-使用Google Protobuf编解码
- Netty protobuf的编解码使用
- netty编解码之使用protobuf
- Netty之Google Protobuf编解码
- [netty]-消息编解码之google的Protobuf编解码
- Netty实战(二)Netty服务器,采用Protobuf编解码
- 《netty权威指南》8Google Protobuf编解码
- Netty 权威指南之Google protobuf 编解码
- Netty编解码框架:Java序列化、Protobuf、 Marshalling
- Netty学习(七)-Netty编解码技术以及ProtoBuf和Thrift的介绍
- 使用encodeURl()进行编解码
- Netty编解码技术
- 十一、Google Protobuf 编解码
- netty开发tcp数据传输编解码框架使用
- 使用NSSecureCoding协议进行对象编解码
- 使用NSSecureCoding协议进行对象编解码
- 64bit linux下执行arm-linux-gcc: 没有那个文件或目录
- 安卓recovery的编译
- String和StringBuffer的区别
- JAVA关于时间的几个类
- 正则表达式学习笔记
- Netty使用Protobuf进行编解码
- LeetCode 172. Factorial Trailing Zeroes
- 09上机练习4
- 如何把dmp文件导入oracle12c中,并在java中实现数据库的接连
- 开源集锦(六)GitHub开源控件(二)
- c\c++语言去除字符串首尾空格
- Aspose正式版与盗版的区别
- 二叉树
- leetcode 14. Longest Common Prefix