最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

netty 中使用 Protobuf

XAMPP新闻 admin 825浏览 0评论
 private class ChildChannelHandler extends ChannelInitializer<SocketChannel> {
@Override
protected void initChannel(SocketChannel ch) {
ch.pipeline().addLast(“protobufFrameDecoder”, new ProtobufVarint32FrameDecoder());

ch.pipeline().addLast(“protobuf decoder”, new ProtobufDecoder(SubscribeReqPeoro.SubscribeReq.getDefaultInstance()));

ch.pipeline().addLast(“LengthFieldPrepender”, new ProtobufVarint32LengthFieldPrepender());
ch.pipeline().addLast(“protobuf encoder”, new ProtobufEncoder());

ch.pipeline().addLast(new TimeServerHandler());
}
}
向 ChannelPipeline 添加 ProtobufVarint32FrameDecoder, 主要用于半包处理, 后续添加 ProtobufDecoder 解码器, 它的参数是 com.google.protobuf.MessageLite 实际上就是告诉 ProtobufDecoder 需要解码的目标类是什么.

ProtobufVarint32LengthFieldPrepender: 因为 ProtobufEncoder 只是将 message 的各个 filed 按照规则输出, 并没有 serializedSize, 所以 socket 无法判定 package(封包). 这个 Encoder 的作用就是在 ProtobufEncoder 生成的字节数组前, 设置 varint32 数字, 表示 serializedSize.

转载请注明:XAMPP中文组官网 » netty 中使用 Protobuf

您必须 登录 才能发表评论!