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

在上一篇介绍的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发送出去就好了。

posted on 2012-03-25 15:44  daemonh  阅读(196)  评论(0编辑  收藏  举报

导航