java使用protobuf遇到的问题

最近项目开发中有涉及到protobuf的模块,详情如下:

  待开发的tcp客户端与服务端保持socket长链接,只支持protobuf编码格式的数据包,用的netty4框架,LengthFieldBasedFrameDecoder解码器,为什么没有用自带的protobuf解码器,因为涉及到多个protobuf实例。初始的socket连接建立没有问题,服务端要求的心跳响应也能回复,链路不会断开。但是客户端向服务端发送数据包时,服务端似乎并没有收到,服务端向客户端回传消息时,收到的似乎与预期不相符,并且不能反序列化为对象。

下面是收到服务端回传的消息时处理的代码

ByteBuf buf = (ByteBuf) msg;
int len = buf.readableBytes();
byte[] req = new byte[len];
buf.readBytes(req);

byte[] vct = Arrays.copyOfRange(req, 12, req.length - 1);
VctMessage rsp = VctMessage.parseFrom(vct);

米琪卡哇伊
浏览 745回答 3
3回答

慕码人2483693

原因居然是登录认证前没有让服务端设置编码为protobuf,不得不说做二次开发的文档真是不可靠,折腾。

阿波罗的战车

你看一下《Netty权威指南》第8章, 它上面用了两个Decoder, ProtobufVarint32FrameDecoder和ProtobufDecoder,我没试过,你试一下
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java