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