Sha*_*awn 9 networking network-programming network-protocols protocol-buffers
我使用' protobuf '用于使用TCP的C/S网络程序.
这是我的客户步骤:
1,将数据打包成'protobuf'
2,获取包的大小(以字节为单位)并构造长度前缀帧
3,将frame + pack写入socket
然后是服务器:
1,从socket读取Length-prefix帧并获取长度N.
2,从套接字读取N个字节并将数据填充到protobuf实例中
3,通过"key"从protobuf获得"价值"
我认为看起来有点复杂,是否有某种自动生成的protobuf长度前缀框架,那么我不需要自己构造一个.或者我可以做些什么来使代码更清洁?
使用protobuf,并假设您在同一个管道中发送多条消息,然后:是 - 您需要将长度作为前缀,否则它将需要读取到流的末尾.
protobuf确实包含一些基本的RPC 存根,但它们使用的RPC实现不是OSS项目的一部分,因此不可用.但是,实现中列出了一些独立的protobuf RPC堆栈.
就个人而言,我倾向于假装数据序列是序列的一部分repeated- 即前缀为"field 1,string"(aka 0a),长度为"varint"编码.这意味着整个网络流是有效的protobuf流.不过,这可能仅仅是我的强迫症.
某些实现可能包含有助于此的功能.例如,protobuf-net(其中一个.NET版本)具有SerializeWithLengthPrefix/ DeserializeWithLengthPrefixmethods,它允许库为您执行此操作(同时提供一系列格式供您选择).
| 归档时间: |
|
| 查看次数: |
5366 次 |
| 最近记录: |