本规范定义了以下几方面的内容:
将来还会定义:
- 服务器之间的接口协议
本协议当前版本号为 1*。
本协议涉及的端口号通讯方式TCP窗口消息定义基本数据类型消息结构消息头格式(Message Header)客户端与服务器间的消息定义请求连接(TABLE_BIND)操作TABLE_BIND 消息定义TABLE_BIND_RESP 消息定义请求断开连接(TABLE_UNBIND)操作TABLE_UNBIND 消息定义TABLE_UNBIND_RESP 消息定义请求保持连接(TABLE_ACTIVE_TEST)操作TABLE_ACTIVE_TEST 消息定义TABLE_ACTIVE_TEST_RESP 消息定义保存(TABLE_SET)操作TABLE_SET 消息体定义TABLE_SET_RESP 消息体定义追加(TABLE_APPEND)操作TABLE_APPEND 消息体定义TABLE_APPEND_RESP 消息体定义删除(TABLE_DEL)操作TABLE_DEL 消息体定义TABLE_DEL_RESP 消息体定义查询(TABLE_GET)操作TABLE_GET 消息体定义TABLE_GET_RESP 消息体定义Command_Id定义
端口号 | 应用 |
51206 | 客户机与服务器间的长连接 |
51205 | 服务器与服务器间的长连接 |
本协议使用TCP长连接方式进行通讯。即在一个TCP连接中进行多个数据包的发送和接收。同时本协议使用二进制异步通讯方式进行数据转输,即每个消息不必等待回复就可以进行下一个消息的发送,消息的回复与发送的次序不一定相同。
客户机与服务器的消息通讯窗口默认为 16 ,如果改变需要在服务器和客户端同时变更。
Unsigned Integer | 无符号整数 |
Integer | 整数,可为正整数、负整数或零 |
Octet String | 定长字符串,位数不足时,如果左补0则补ASCII表示的零以填充,如果右补0则补二进制的零以表示字符串的结束符 。 |
String | 不定长字符串 |
条目 | 说明 |
Message Header | 消息头(所有消息都会有的公共包头) |
Message Body | 消息体 |
字段名 | 字节数 | 类型 | 描述 |
Total_Length | 2 | unsigned integer | 消息总长度(Head+Body-2),不包括Total_length本身 |
Command_Id | 2 | unsigned integer | 命令或响应类型 |
Sequence_Id | 2 | unsigned integer | 消息流水号,顺序累加,步长为1,循环使用(一对请求和应答消息的流水号必须相同) |
客户端向服务器端发起连接请求,在通过身份验证之后方可进行数据传输。同时在一定时间里没有通信时发出持续激活请求,以避免TCP连接TimeOut中断。
TABLE_BIND操作的目的是客户端向服务器注册作为一个合法登录者,若注册成功后即建立了应用层的连接,此后客户端可以向服务器端发出其它的请求。
服务器以TABLE_BIND_RESP响应客户端的请求。
字段名 | 字节数 | 属性 | 描述 |
User_Name | 6 | Octet String | 客户端用以连接上来的用户名 。右补零。 |
Authentiator_Code | 16 | Octet String | 用于鉴别用户身份的验证,它的值是由MD5 Hash计算出来的。通常计算方法为 Authentiator_Code=MD5(User_Name + shared secret + timestamp)。shared secret是双方协商好的密码,timestamp格式为MMDDHHMMSS,10位。 |
Version | 2 | Unsigned Integer | 双方协商的版本号 |
Timestamp | 10 | Octet String | 由客户间产生的格式为MMDDHHMMSS的时间戳明文。 |
字段名 | 字节数 | 属性 | 描述 |
Status | 2 | Unsigned Integer | 状态。 0:正确 1:消息结构解析错 2:非法客户端或认证错 3:版本协商失败 4:其它错误 |
Version | 2 | Unsigned Integer | 服务器支持的最高版本号 |
TABLE_UNBIND操作的目的是客户断或服务器端由于某些原因决定断开当前的应用层连接而发起的操作。此操作完成后,客户端与服务器之间的应用层连接被释放,之后的客户端要向服务器通信,应发起TABLE_BIND操作。
服务器以TABLE_UNBIND_RESP响应客户端的请求。
无消息体。
无消息体。
本操作用于通信双方采用长连接通信时保持连接,避免TCP的TimeOut。
服务器以TABLE_ACTIVE_TEST_RESP响应客户端的请求。
无消息体。
无消息体。
本操作相当于 set(Key,Value) 服务器以TABLE_SET_RESP响应客户端的请求。
字段名 | 字节数 | 属性 | 描述 |
NameLen | 2 | unsigned integer | Name的长度 |
Name | NameLen | Octet String | Name |
Value | 变长 | Octet String |
字段名 | 字节数 | 属性 | 描述 |
Status | 2 | Unsigned Integer | 状态。 0:正确 1:消息结构解析错 2:非法客户端或认证错 5:服务器出错 |
本操作相当于 append(Key,Value),将把vlaue追加到Key原来的value后边 服务器以TABLE_APPEND_RESP响应客户端的请求。
字段名 | 字节数 | 属性 | 描述 |
NameLen | 2 | unsigned integer | Name的长度 |
Name | NameLen | Octet String | Name |
Value | 变长 | Octet String |
字段名 | 字节数 | 属性 | 描述 |
Status | 2 | Unsigned Integer | 状态。 0:正确 1:消息结构解析错 2:非法客户端或认证错 5:服务器出错 |
本操作相当于 delete(Key,Value),将删除Key及对应的数值 服务器以TABLE_DEL_RESP响应客户端的请求。
字段名 | 字节数 | 属性 | 描述 |
Name | 变长 | Octet String | Name |
字段名 | 字节数 | 属性 | 描述 |
Status | 2 | Unsigned Integer | 状态。 0:正确 1:消息结构解析错 2:非法客户端或认证错 5:服务器出错 6:没有对应的key |
Name | 变长 | Octet String | Name |
本操作相当于 get(Key,Value),请求Key对应的数值 服务器以TABLE_GET_RESP响应客户端的请求。
字段名 | 字节数 | 属性 | 描述 |
Name | 变长 | Octet String | Name |
字段名 | 字节数 | 属性 | 描述 |
Status | 2 | Unsigned Integer | 状态。 0:正确 1:消息结构解析错 2:非法客户端或认证错 5:服务器出错 6:没有对应的key |
NameLen | 2 | unsigned integer | Name的长度 |
Name | NameLen | Octet String | Name |
Value | 变长 | Octet String | Value |
当Status为6时,Value长度为0
消息 | Command_Id值 | 说明 |
TABLE_BIND | 1 | 请求建立连接 |
TABLE_BIND_RESP | 2 | 请求建立连接应答 |
TABLE_UNBIND | 3 | 请求断开连接 |
TABLE_UNBIND_RESP | 4 | 请求断开连接 |
TABLE_ACTIVE_TEST | 5 | 连路激活测试 |
TABLE_ACTIVE_TEST_RESP | 6 | 连路激活测试 |
TABLE_SET | 7 | 保存操作 |
TABLE_SET_RESP | 8 | 保存响应操作 |
TABLE_APPEND | 9 | 追加操作 |
TABLE_APPEND_RESP | 10 | 追加响应操作 |
TABLE_DEL | 11 | 删除操作 |
TABLE_DEL_RESP | 12 | 删除响应操作 |
TABLE_GET | 13 | 查询操作 |
TABLE_GET_RESP | 14 | 查询响应操作 |