云风在skynet中继承了sproto的传输协议,对比protobuf的好处是,能明文看到传输内容,而且skynet不需要protobuf这么功能,所以云风也建议在lua层使用sproto来作为skynet的传输协议。
在examples文件夹中的agent.lua中有用到sproto的例子。下面讲解一下sproto的使用过程和原理:
proto.lua的文件中包含一个实例协议:
1 local sprotoparser = require "sprotoparser" 2 3 local proto = {} 4 5 proto.c2s = sprotoparser.parse [[ 6 .package { 7 type 0 : integer 8 session 1 : integer 9 } 10 11 handshake 1 { 12 response { 13 msg 0 : string 14 } 15 } 16 17 get 2 { 18 request { 19 what 0 : string 20 } 21 response { 22 result 0 : string 23 } 24 } 25 26 set 3 { 27 request { 28 what 0 : string 29 value 1 : string 30 } 31 } 32 33 quit 4 {} 34 35 ]] 36 37 proto.s2c = sprotoparser.parse [[ 38 .package { 39 type 0 : integer 40 session 1 : integer 41 } 42 43 heartbeat 1 {} 44 ]] 45 46 return proto