最近項目開發(fā)中有涉及到protobuf的模塊,詳情如下:
待開發(fā)的tcp客戶端與服務(wù)端保持socket長鏈接,只支持protobuf編碼格式的數(shù)據(jù)包,用的netty4框架,LengthFieldBasedFrameDecoder解碼器,為什么沒有用自帶的protobuf解碼器,因為涉及到多個protobuf實例。初始的socket連接建立沒有問題,服務(wù)端要求的心跳響應(yīng)也能回復,鏈路不會斷開。但是客戶端向服務(wù)端發(fā)送數(shù)據(jù)包時,服務(wù)端似乎并沒有收到,服務(wù)端向客戶端回傳消息時,收到的似乎與預期不相符,并且不能反序列化為對象。
下面是收到服務(wù)端回傳的消息時處理的代碼
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);
3 回答
慕碼人2483693
TA貢獻1860條經(jīng)驗 獲得超9個贊
原因居然是登錄認證前沒有讓服務(wù)端設(shè)置編碼為protobuf,不得不說做二次開發(fā)的文檔真是不可靠,折騰。
阿波羅的戰(zhàn)車
TA貢獻1862條經(jīng)驗 獲得超6個贊
你看一下《Netty權(quán)威指南》第8章, 它上面用了兩個Decoder, ProtobufVarint32FrameDecoder和ProtobufDecoder,我沒試過,你試一下
添加回答
舉報
0/150
提交
取消
