文档章节

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

皮鞋铮亮
 皮鞋铮亮
发布于 2015/08/18 09:36
字数 657
阅读 158
收藏 4

通讯协议可以根据自己的需要任意定义。我的定义如下:

一、术语定义:

名称

解释

备注

通道

指一个socket的连接通路

程序中,一般指SocketChannel

令牌

服务端用以区分连接通道的唯一标识

 

报文

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

Packet

指令

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

Order


二、规约(需仔细阅读)

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

1、指令(报文)标记,大写英文字母,每一类指令(报文)都有自己唯一的标记;

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

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

4、指令体(报文);

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

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

5、所有报文传输,均采用UTF-8

6、报文中包含中文,请用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

三、服务端报文

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

© 著作权归作者所有

皮鞋铮亮
粉丝 36
博文 12
码字总数 11603
作品 0
沈阳
私信 提问
基于NIO的消息路由的实现(一) 前言

一、前言: 已经很久没有碰编码了,大概有9年的时间,日新月异的框架和新东西让我眼花缭乱。之前一直在做web相关的应用。由于项目不大,分布式开发在我编码的那个年代里没有做过,后来走上管...

皮鞋铮亮
2015/08/17
4.6K
16
知乎技术分享:知乎千万级并发的高性能长连接网关技术实践

本文来自知乎官方技术团队的“知乎技术专栏”,感谢原作者faceair的无私分享。 1、引言 实时的响应总是让人兴奋的,就如你在微信里看到对方正在输入,如你在王者峡谷里一呼百应,如你们在直播...

首席大胸器
09/05
216
0
Java远程通讯技术及原理分析

聊聊远程通信 Java远程通讯技术及原理分析 聊聊Socket、TCP/IP、HTTP、FTP及网络编程 RMI原理及实现 RPC原理及实现 轻量级分布式 RPC 框架 使用 RMI + ZooKeeper 实现远程调用框架 深入浅出S...

陶邦仁
2016/02/23
2.9K
2
基于netty实现的服务端Nio MVC业务开发--ketty

Ketty 基于 netty 实现的服务端 Nio MVC 业务开发平台,提供性能监控,日志分析,动态扩展的功能。 ketty-srv模块 基于netty实现支持自定义协议扩展的Nio MVC高性能业务框架 协议 Http Ketty...

郑大侠
2015/11/09
1K
0
郑大侠/jetty

##Ketty 基于netty实现的服务端Nio MVC业务开发平台,提供性能监控,日志分析,动态扩展的功能。 ###ketty-srv模块 基于netty实现支持自定义协议扩展的Nio MVC高性能业务框架 ####协议 Http...

郑大侠
2015/11/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

golang-字符串-地址分析

demo package mainimport "fmt"func main() {str := "map.baidu.com"fmt.Println(&str, str)str = str[0:5]fmt.Println(&str, str)str = "abc"fmt.Println(&s......

李琼涛
今天
4
0
Spring Boot WebFlux 增删改查完整实战 demo

03:WebFlux Web CRUD 实践 前言 上一篇基于功能性端点去创建一个简单服务,实现了 Hello 。这一篇用 Spring Boot WebFlux 的注解控制层技术创建一个 CRUD WebFlux 应用,让开发更方便。这里...

泥瓦匠BYSocket
今天
6
0
从0开始学FreeRTOS-(列表与列表项)-3

FreeRTOS列表&列表项的源码解读 第一次看列表与列表项的时候,感觉很像是链表,虽然我自己的链表也不太会,但是就是感觉很像。 在FreeRTOS中,列表与列表项使用得非常多,是FreeRTOS的一个数...

杰杰1号
今天
4
0
Java反射

Java 反射 反射是框架设计的灵魂(使用的前提条件:必须先得到代表的字节码的 Class,Class 类 用于表示.class 文件(字节码)) 一、反射的概述 定义:JAVA 反射机制是在运行状态中,对于任...

zzz1122334
今天
5
0
聊聊nacos的LocalConfigInfoProcessor

序 本文主要研究一下nacos的LocalConfigInfoProcessor LocalConfigInfoProcessor nacos-1.1.3/client/src/main/java/com/alibaba/nacos/client/config/impl/LocalConfigInfoProcessor.java p......

go4it
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部