netty(十一)Protobuf版本迭代

背景:

服务端迭代,需要兼容旧版客户端

新版客户端服务端通信数据结果变化

 

在上一篇的基础上,修改部分服务端代码:

 

syntax = "proto2";
package myproto;

option java_package = "com.jds.test.proto";
option java_outer_classname = "MyBaseProtoV2";

message Body {
	repeated string l = 1; // repeated 列表
	optional string newField = 4;
} 

message BaseProto {
	required int32 code = 1;//   默认值,表示成员只有0个或者1个
	required string msg = 2;// 
	optional Body result = 3;
}

  

 

与此前对比,干掉Optional的Type和map,新增一个newField,序列号为4

这个新的proto,编译后放在服务端,客户端用旧版,双方通信,模拟看结果

pipeline.addLast(new ProtobufDecoder(MyBaseProtoV2.BaseProto.getDefaultInstance()));

   

class ServerHandler4V2 extends SimpleChannelInboundHandler<MyBaseProtoV2.BaseProto> {

    @Override
    protected void channelRead0(ChannelHandlerContext ctx, MyBaseProtoV2.BaseProto msg) throws Exception {
        System.out.println("RESPONSE--------"+msg.toString());

        MyBaseProtoV2.BaseProto.Builder builder = MyBaseProtoV2.BaseProto.newBuilder();
        builder.setCode(msg.getCode() + 200);
        builder.setMsg("server" + msg.getCode());
        MyBaseProtoV2.Body.Builder bodyBuilder = MyBaseProtoV2.Body.newBuilder();
        bodyBuilder.setNewField(String.valueOf(msg.getCode() + "new msg for client"));
        builder.setResult(bodyBuilder.build());

        ctx.writeAndFlush(builder.build()).

  

解码器和接收handler,改为新版数据文件

 

服务端输出:

server start ...... 
channelActive
RESPONSE--------code: 0
msg: "msg0"
result {
  l: "0"
  l: "0"
  3: 1
}

RESPONSE--------code: 1
msg: "msg1"
result {
  l: "10"
  l: "1"
  3: 1
}

RESPONSE--------code: 2
msg: "msg2"
result {
  l: "20"
  l: "4"
  3: 1
}

RESPONSE--------code: 3
msg: "msg3"
result {
  l: "30"
  l: "9"
  3: 1
}

RESPONSE--------code: 4
msg: "msg4"
result {
  l: "40"
  l: "16"
  3: 1
}

  

客户端输出:

server response : code: 200
msg: "server0"
result {
  4: "0new msg for client"
}

server response : code: 201
msg: "server1"
result {
  4: "1new msg for client"
}

server response : code: 202
msg: "server2"
result {
  4: "2new msg for client"
}

server response : code: 203
msg: "server3"
result {
  4: "3new msg for client"
}

server response : code: 204
msg: "server4"
result {
  4: "4new msg for client"
}

  

 

posted on 2018-09-21 10:12  silyvin  阅读(159)  评论(0)    收藏  举报