关闭

记录:protobuf在网游中的用法(二)

2026人阅读 评论(0) 收藏 举报

在上一篇介绍的protobuf用法(http://blog.csdn.net/herm_lib/article/details/7384613),有点偏复杂了。可以简化一下。

结构: total_len[16] + head_len[8] + head + body。

这次像上一篇介绍最后介绍的一样,把head和body分开了,这样可以让服务器对消息的处理更灵活,有时候,服务器只要head内容,这样可以针对性地只解析head,而不用把body内容也解析出来。

头定义差不多像下面的样子:

package ProtoCS;

message Head

{

            required uint32 cmd_id = 1;

            。。。。。。。。

}

各种包体定义类似下面:

message GetRoleRes

{

             required uint64 id;

             required string name;

             。。。。。

}


message GetPetRes

{

             。。。。

}

和上一篇介绍区别很大,变简单了。

组织数据的过程的过程大体介绍一下:

1. 写入16bits的总长度,这里16bits考虑用网络字节序。

2. 写入8bits的头长度。

3. 写入头内容

        ProtoCS::Head head;

        。。。。

        head.SerializeToArray(buf + 3, bufSize - 3);

4. 最后写入包体内容

        ProtoCS::GetRoleRes roleRes;

        roleRes.set_id(111122233);

        roleRes.SerializeToArray(buf + 3 + headLen, bufSize - 3 - headLen);

把整个buf+totalLen发送出去就好了。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:293744次
    • 积分:4219
    • 等级:
    • 排名:第7269名
    • 原创:112篇
    • 转载:11篇
    • 译文:0篇
    • 评论:120条
    最新评论