Sproto协议简析

本文介绍了Sproto协议的编码方式,重点在于其小端编码的特点。以传输proto协议字符串为例,展示了Sproto的定义格式。同时探讨了协议的打包和拆包过程,提到了一种通过sprotoparser进行协议打包并存储的方法,以便在C++中进行读取。核心关注点是如何有效地处理数据的打包和拆包操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

sproto所有的编码都以小端方式编码。
以传输proto协议字符串为例子,使用sproto定义协议时,格式为: 

.package {
  type 0 : integer 
  session 1 : integer
} 
get 1 { 
  request { 
    what 0 : string 
  } 
  response { 
    result 0 : string
  }
}
 实际传输时会被拆分为两部分:

protocol = {
  get = {
    tag = 1, 
    request = get.request, 
    response = get.response, 
  }
}, 
type = { 
  package = { 
    {tag = 0 typename = integer name = type }, 
    { tag = 1 typename = integer name = session },
  },
  get.request = {
    { tag = 0 typename = string name = what }, 
  }, 
  get.response = { 
    { tag = 0 typename = string name=result },
  }, 
};
 通过一系列复杂的打包拆包,最后转化为C里面的数据结构,sproto的结构由内存池、类型,协议和两个标记组成:

struct sproto { 
  struct pool memory; 
  int type_n; 
  int protocol_n; 
  struct sproto_type * type; 
  struct protocol * proto;
}; 

打包拆包的部分还在看,基本就是一些对数据块读取的协议。 

本来想着要将sproto绑定lua转化到可以直接通过C++去绑定,但是后来看到一个仁兄的做法,简单粗暴,将写好的协议直接调用sprotoparser打包然后保存起来,再通过在C里面去读取这个包来获得协议;需要处理的就是对信息的打包和拆包了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值