文档章节

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

皮鞋铮亮
 皮鞋铮亮
发布于 2015/08/18 09:36
字数 657
阅读 149
收藏 4
点赞 1
评论 0

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

一、术语定义:

名称

解释

备注

通道

指一个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 ⋅ 16

Java远程通讯技术及原理分析

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

陶邦仁 ⋅ 2016/02/23 ⋅ 2

基于netty实现的服务端Nio MVC业务开发--ketty

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

郑大侠 ⋅ 2015/11/09 ⋅ 0

郑大侠/jetty

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

郑大侠 ⋅ 2015/11/02 ⋅ 0

分布式服务架构之java远程调用技术浅析

在 分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI、MINA、ESB、 Burlap、Hessian、SOAP、EJB和JMS等,这些名词之间到底...

aldo ⋅ 2012/11/20 ⋅ 2

分布式服务架构之java远程调用技术浅析

在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI、MINA、ESB、Burlap、Hessian、SOAP、EJB和JMS等,这些名词之间到底是...

weyling ⋅ 2013/12/28 ⋅ 0

Netty干货分享:京东京麦的生产级TCP网关技术实践总结

1、引言 京东的京麦商家后台2014年构建网关,从HTTP网关发展到TCP网关。在2016年重构完成基于Netty4.x+Protobuf3.x实现对接PC和App上下行通信的高可用、高性能、高稳定的TCP长连接网关。 早期...

JackJiang2011 ⋅ 2017/12/01 ⋅ 0

Java远程通讯可选技术及原理

原文网址链接http://www.blogjava.net/BlueDavy/archive/2008/03/04/182077.html 在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,...

数通畅联 ⋅ 2015/02/02 ⋅ 0

JMS 之 Active MQ 的消息传输

一、消息协商器(Message Broker) broke:消息的交换器,就是对消息进行管理的容器。ActiveMQ 可以创建多个 Broker,客户端与ActiveMQ交互,实际上都是与ActiveMQ中的Broker交互,Broker配置...

xsster ⋅ 2017/07/28 ⋅ 0

陈永佳/NextMQTT

Next-MQTT 基于MQTT的封装库,实现点对点消息通讯: 的请求-响应模式; 的发布-订阅模式 一、Topic规则 NextMQTT在Topic设计上,已经区分不同服务之间和不同客户端之间的消息路由。基于MQTT的T...

陈永佳 ⋅ 2017/08/17 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java Web如何操作Cookie的添加修改和删除

创建Cookie对象 Cookie cookie = new Cookie("id", "1"); 修改Cookie值 cookie.setValue("2"); 设置Cookie有效期和删除Cookie cookie.setMaxAge(24*60*60); // Cookie有效时间 co......

二营长意大利炮 ⋅ 今天 ⋅ 0

【每天一个JQuery特效】淡入淡出显示或隐藏窗口

我是JQuery新手爱好者,有时间就练练代码,防止手生,争取每天一个JQuery练习,在这个博客记录下学习的笔记。 本特效主要采用fadeIn()和fadeOut()方法显示淡入淡出的显示效果显示或隐藏元...

Rhymo-Wu ⋅ 今天 ⋅ 0

Spring JDBC使用方法

普通实现: 1、创建数据表customer。 可以使用任何数据库实现,在项目中要引入相应数据库驱动包并配置相应数据库连接。 2、创建Customer pojo。 Customer类的属性对应数据库的属性,除了为每...

霍淇滨 ⋅ 今天 ⋅ 0

Contos 7 安装Jenkins

Jenkins是一款能提高效率的软件,它能帮你把软件开发过程形成工作流,典型的工作流包括以下几个步骤 开发 提交 编译 测试 发布 有了Jenkins的帮助,在这5步中,除了第1步,后续的4步都是自动...

欧虞山 ⋅ 今天 ⋅ 0

revel

revel install go get github.com/revel/revelgo get github.com/revel/cmd create new app revel new git.oschina.net/zdglf/myapp run app revel run git.oschina.net/zdglf/myapp ot......

zdglf ⋅ 今天 ⋅ 0

49. Group Anagrams - LeetCode

Question 49. Group Anagrams Solution 思路:维护一个map,key是输入数组中的字符串(根据字符排好序) Java实现: public List<List<String>> groupAnagrams(String[] strs) { Map<Strin......

yysue ⋅ 今天 ⋅ 0

spring Email

使用spring发Email其实就是使用spring自己封装携带的一个javamail.JavaMailSenderImpl类而已。这个类可以当一个普通的java对象来使用,也可以通过把它配置变成spring Bean的方式然后注入使用...

BobwithB ⋅ 今天 ⋅ 0

spark 整理的一些知识

Spark 知识点 请描述spark RDD原理与特征? RDD全称是resilient distributed dataset(具有弹性的分布式数据集)。一个RDD仅仅是一个分布式的元素集合。在Spark中,所有工作都表示为创建新的...

tuoleisi77 ⋅ 今天 ⋅ 0

思考

时间一天天过感觉自己有在成长吗?最怕的是时光匆匆而过,自己没有收获!下面总结下最近自己的思考。 认识自己 认识另一个自己,人们常说要虚心听取别人意见和建议。然而人往往是很难做到的,...

hello_hp ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部