20 June 2013

Protobuf

官网 是一种网络传输格式,压缩率比较好,因此最近小用了下。这里记录下工程中要注意的问题。

网络字节序

所有以太网字节序都是大字节序,可以参照维基百科:字节序 在c中可以通过ntol等等函数进行本地转化。将网络的大字节序转化为本地的小字节序(通常x86架构下是)。

java中则默认定义DataInputStream等方式进行读取。Java由于包含了虚拟机,因此对字节序实际上进行了屏蔽。如果我们按byte打印出来其实是大字节序。

protobuf生成lite:

在手机上使用protobuf:如果是ios,有人已经开发了protobuf的开发包,如果是安卓的则需要打出lite包来提供服务。protobuf全包不能在安卓虚拟机上正常运行。打lite的方式:

  • 首先要注意增加package标记,不是protobuf本身的package,而是java package定义:
`option java_package = "com.example.foo.bar";`
  • 在libprotobuf.jar用lite选项生成,参见README文档

  • protoc中定义重生成java bean也用标记重标记。在安卓中需要使用lite形式的java文件,生成方法是需要在proto文件定义中设定:

`option optimize_for = LITE_RUNTIME;`
  • 生成java的命令是:
`protoc --proto_path=src --java_out=build/gen src/foo.proto`

可以参考官方文档

http 请求与应答

http请求包含头和内容,头中是一个字典,包含返回代码;内容类型等等,这些都是可以定义的。国际通用的返回代码包含在这里

http内容则是任意内容。在php里可以通过echo print等方式返回。java中可通过outpustream打出。



blog comments powered by Disqus