一、Protocol Buffers简介
现在开源的《烽烟OL》的通信协议采用的是Google 的Protocol Buffers,Protocol Buffers(以下简称PB)是一种用于序列化结构化数据的机制,可用于用于分布式应用之间的数据通信或者异构环境下的数据交换。它具有灵活、高效、自动化的特点,类似于XML,但是比XML更小巧、快捷、简单。在Google 几乎所有它内部的RPC协议和文件格式都是采用PB。
PB具有以下特点:
1)平台无关、语言无关
2)高性能 比XML块20-100倍
3)体积小 比XML小3-10倍
4)使用简单
5)兼容性好
当然,PB也有缺点,与XML相比,PB的缺点是不易读。众所周知,XML是一种自描述语言,一看就可知道其作用,见文知意。而PB序列化后是一串二进制代码,如果没有对应的协议格式(即.proto文件),想要读懂它难如登天。
二、Protocol Buffers安装
1)下载Google Protocol Buffer源码包
下载可以到protobuf官网下载: http://code.google.com/p/protobuf/downloads/list ,我下载的是Protocol Buffers 2.5.0 compiler。
2)解压压缩包
解压压缩包后,会得到文件列表。
3)编译vs工程
在解压后的文件夹中,打开vsprojects目录. 打开libprotobuf.vcproj(这个是vs的工程文件,打开前请确认安装了vs2005 或vs2008,vs2010等等),在打开工程中, 可能需要转换工程,直接转换就行了。
右键分别生成libprotobuf,libprotobuf-lite,libprotoc,protoc这四个工程(编译模式为Release 模式)。
4)编译完成
编译完成后,可以在vsprojects\Release下发现3个lib和一个exe文件,他们分别是libprotobuf.lib,libprotobuf-lite.lib,libprotoc.lib和protoc.exe。
5)拷贝文件到windows目录下: 将得到的libprotobuf.lib,libprotobuf-lite.lib,libprotoc.lib和protoc.exe拷贝到系统盘的windows目录下。如果你的系统安装在C盘,那么就拷贝到c:\windows目录下 。
6)编译proto文件,生成python文件
假设在E:\test目录下有一个名为test.proto的proto文件,那么打开CMD,输入“protoc.exe -I=e:\test --python_out=e:\test e:\test\test.proto ”就可以生成python源码文件
test_pb2.py,在需要用到的工程里import这个文件就可以直接用了。
三、Firefly中使用Protocol Buffers实例
下面是一个玩家接受任务的通讯实例,先上proto文件
1)applyQuest.proto
message applyQuestRequest为客户端的请求
message applyQuestResponse为服务器的回复
用上面的编译方法将applyQuest.proto编译成python源码文件applyQuest_pb2.py
2)quest.py文件,服务端处理这个请求的文件。
3)客户端也会有对应的proto文件,可以将服务器发回来的数据解析出来,得出此次交互的结果。
现在开源的《烽烟OL》的通信协议采用的是Google 的Protocol Buffers,Protocol Buffers(以下简称PB)是一种用于序列化结构化数据的机制,可用于用于分布式应用之间的数据通信或者异构环境下的数据交换。它具有灵活、高效、自动化的特点,类似于XML,但是比XML更小巧、快捷、简单。在Google 几乎所有它内部的RPC协议和文件格式都是采用PB。
PB具有以下特点:
1)平台无关、语言无关
2)高性能 比XML块20-100倍
3)体积小 比XML小3-10倍
4)使用简单
5)兼容性好
当然,PB也有缺点,与XML相比,PB的缺点是不易读。众所周知,XML是一种自描述语言,一看就可知道其作用,见文知意。而PB序列化后是一串二进制代码,如果没有对应的协议格式(即.proto文件),想要读懂它难如登天。
二、Protocol Buffers安装
1)下载Google Protocol Buffer源码包
下载可以到protobuf官网下载: http://code.google.com/p/protobuf/downloads/list ,我下载的是Protocol Buffers 2.5.0 compiler。
2)解压压缩包
解压压缩包后,会得到文件列表。
3)编译vs工程
在解压后的文件夹中,打开vsprojects目录. 打开libprotobuf.vcproj(这个是vs的工程文件,打开前请确认安装了vs2005 或vs2008,vs2010等等),在打开工程中, 可能需要转换工程,直接转换就行了。
右键分别生成libprotobuf,libprotobuf-lite,libprotoc,protoc这四个工程(编译模式为Release 模式)。
4)编译完成
编译完成后,可以在vsprojects\Release下发现3个lib和一个exe文件,他们分别是libprotobuf.lib,libprotobuf-lite.lib,libprotoc.lib和protoc.exe。
5)拷贝文件到windows目录下: 将得到的libprotobuf.lib,libprotobuf-lite.lib,libprotoc.lib和protoc.exe拷贝到系统盘的windows目录下。如果你的系统安装在C盘,那么就拷贝到c:\windows目录下 。
6)编译proto文件,生成python文件
假设在E:\test目录下有一个名为test.proto的proto文件,那么打开CMD,输入“protoc.exe -I=e:\test --python_out=e:\test e:\test\test.proto ”就可以生成python源码文件
test_pb2.py,在需要用到的工程里import这个文件就可以直接用了。
三、Firefly中使用Protocol Buffers实例
下面是一个玩家接受任务的通讯实例,先上proto文件
1)applyQuest.proto
![](http://down.9miao.com/attachment/forum/201309/28/111240sipv9whwhyx509py.jpg)
message applyQuestRequest为客户端的请求
message applyQuestResponse为服务器的回复
用上面的编译方法将applyQuest.proto编译成python源码文件applyQuest_pb2.py
2)quest.py文件,服务端处理这个请求的文件。
![](http://down.9miao.com/attachment/forum/201309/28/111236z5h6lhbc6ohskhxk.jpg)
3)客户端也会有对应的proto文件,可以将服务器发回来的数据解析出来,得出此次交互的结果。