基于NIO的消息路由的实现(二)通信协议

通信协议能够根据本身的须要任意定义。个人定义以下: socket

1、术语定义: spa

名称 线程

解释 ci

备注 字符串

通道 it

指一个socket的链接通路 table

程序中,通常指SocketChannel 登录

令牌 循环

服务端用以区分链接通道的惟一标识 请求

 

报文

指上行到达通信主线程的通信包

Packet

指令

指通信主线程要发送给对端的下行通信包

Order


2、规约(需仔细阅读)

全部报文和指令均有字符串组成,分为四个部分:

1、指令(报文)标记,大写英文字母,每一类指令(报文)都有本身惟一的标记;

2、指令(报文)流水号Rid;主动发起的指令,自动生成,最大1000000000,循环反复。被动响应的指令,为请求方的Rid回填。

3、指令(报文)Token,自动生成UUID;

4、指令体(报文);

除指令标记和指令流水号以外,其余两项内容,根据不一样的指令(或报文),会有取舍;各部分之间以“|”做为分隔符。

例如:T|128|6e7805ec-8487-4ace-9c1e-cb715888b67f

五、全部报文传输,均采用UTF-8

六、报文中包含中文,请用Base64转码后发送;

服务端指令

1.       分配令牌

当客户端链接到服务端以后,服务端第一时间生成令牌,并下发此指令告知客户端。

类别

定义

备注

标记

T

 

流水号

自动生成,最大1000000000,循环反复

(例如:21

Token

UUID

6e7805ec-8487-4ace-9c1e-cb715888b6

示例:

T|128|6e7805ec-8487-4ace-9c1e-cb715888b67f

2.       错误

类别

定义

备注

标记

E

 

流水号

自动生成,最大1000000000,循环反复

(例如:21

Body

Json,内含errCodeerrMsg两个属性

{"errCode" : "1","errMsg" : "无效请求"}

示例:

E|128|{"errCode" : "1","errMsg" : "无效请求"}

3.       回应

类别

定义

备注

标记

R

 

流水号

是对应上行报文的Rid

(例如:21

示例:

R|102

3、服务端报文

1.       回应

类别

定义

备注

标记

R

 

流水号

是对应上行报文的Rid

(例如:21

Token

 

 

示例:

R|102|6e7805ec-8487-4ace-9c1e-cb715888b67f

2.       维持链路

类别

定义

备注

标记

K

 

流水号

是对应上行报文的Rid

(例如:21

Token

 

 

示例:

K|102|6e7805ec-8487-4ace-9c1e-cb715888b67f

3.       客户端登陆

类别

定义

备注

标记

L

 

流水号

是对应上行报文的Rid

(例如:21

Token

用户的令牌

 

Body

用户的身份标记

此处为客户的业务身份标记,好比用户的系统帐号,手机号等等

示例:

L|102|6e7805ec-8487-4ace-9c1e-cb715888b67f|13898482867

相关文章
相关标签/搜索