日期:2014-05-16  浏览次数:20451 次

TCDatabase介绍(2)

三、TokyoTyrant的网络协议

1、简单介绍

介绍这个,其实价值不大,因为详细的文档都在那里呢:http://1978th.net/tokyotyrant/spex.html#protocol

不过,还是要说一下,因为我对TT的协议,颇有些不满。

TT的协议,各位如果仔细看,就会发现,这是一个典型的未经重构的,临时拼凑起来的协议。最初的TT,只考虑了基本的put、putkeep、putcat、out、get、mget等等命令,每个命令都以0xC8开头,然后再加上一个16位二进制数。

put????????? 0×10

putkeep?? 0×11

putcat????? 0×12

putshl????? 0×13

putnr?????? 0×18

out????????? 0×20

get????????? 0×30

mget?????? 0×31

……

但是,他还有一个misc命令,所有与Table数据类相关的命令,都包含在misc里面,misc的格式是这样的:

[magic:2][nsiz:4][opts:4][rnum:4][nbuf:*][{[asiz:4][abuf:*]}:*]

magic:? 0xC8 0×90

nsiz:???? name的长度

opts:??? option参数

rnum:?? 后续参数的个数

nbuf:??? name

asiz与abuf交替出现,表示每一个参数

因此,我们针对RDBTBL的操作,最终都会调用misc命令。

rdb = RDB::new

rdb.open("localhost", 3900)

rdb.put("foo", "hop")??????????????????????

?

#发出0xC8 0×10 0×0003 0×0003? "foo"??? "hop"

#????? magiccode ksiz????? vsiz?????? kbuf*?? vbuf*