[TOC]
> 遥知兄弟登高处,遍插茱萸少一人。
在计算机技术栈的世界里,其实也有故事。今天就让我们来一起窥探这个IT技术界**JT/T 905.4-2014**王国(以下简称905.4王国)的生存故事。
## 基础概念解析
### 上、下级平台与终端数据
>[warning] 开始之前,我们先区分一下终端、上级平台、下级平台之间的关系。本小册实现的是上级平台的部分,当然对于下级平台的实现也有一定的借鉴意义。
![](https://img.kancloud.cn/37/99/3799e43f8e4dd00e3d44ca68c2ae3b5f_1142x154.png)
各厂家终端提供的数据一定有自己的规范,所以为了实现行业数据的整合、共享,905协议便应用而生了。其基本过程包括下面几个步骤:
1. 终端采集原始数据;
2. 下级平台负责按照905.4协议规范,实现数据的转换,并推送数据给上级平台;
3. 上级平台接收下级平台传来的数据,从而完成来自各终端厂家的数据整合。
> 从这个过程中,我们可以发现上级平台容易作为一个规范化的、可以落地的项目标准,这也是本小册的由来。
## 核心功能
### 通信方式
> 905.4王国是个纪律严明的国度,长久以来,便形成了有问必答的一个交流方式。不像人类那么复杂,会因为情绪的问题刻意避开问题,显得那么不礼貌。
这个王国总是会分为两个派系,Server(上级平台)和Client(下级平台)。一个无休止的问,一个无休止的答。
上级平台与下级平台之间应采用面向连接的链路通信方式,具体要求如下:
- 上下级平台间通信方式采用TCP协议长连接方式;
- 上级平合作为服务器端,提供服务的IP地址、端口号以及用户名、密码等信息,供下级平台接入;
- 下级平台作为客户端,向上级平台发起建立链路连接请求,链路成功建立后上下级平台通过该链路进行数据通信;
- 通信链路通过其中的TCP客户端方发送链路保持数据包检测链路连接状态,实现链路的可靠连接。
### 安全认证
上级平台对下级平台安全验证流程应遵循以下规定:
- 上级平台为下级平台分配相应的接人码、接人用户名、密码以及数据加解密相关参数;
- 下级平台与上级平台连接时,发送“登录请求”消息,上级平台收到下级平台连接请求后,首先验证请求的IP地址,如果请求IP地址与约定的接入IP地址不一致,则返回验证失败结果;其次,上级平台对下级平台的接人码、用户名以及密码进行验证,根据验证的结果向下级平台返回相应的结果值;
- 上下级平台间的数据传输宜采用加密模式传输,实现对传输数据的即时加密。
### 多种业务功能
1. 上级平台向 下级平台发送的请求消息,一般以“DOWN”开头,以后缀`_REQ`结尾;而下级平台向上级平台发送的请求消息一般以“UP”开头,以后缀`_REQ`结尾;
2. 当上下级平台之间有应答消息情况下,应答消息可继续沿用对应的请求消息开头标识符,而通过后缀`_RSP`来标识绪尾。
下表列举了在905.4协议中可以实现的一些业务功能。
消息种类|业务数据类型名称|业务数据类型标识|数值
--|--|--|--
链路管理类|链路登录请求消息|UP_CONNECT_REQ|0x2001
链路管理类|链路登录应答消息|UP_CONNECT_RSP|0x2002
链路管理类|链路注销请求消息|UP_CONNECT_REQ|0x2003
链路管理类|链路注销应答消息|UP_DISCONNECT_RSP|0x2004
链路管理类|链路连接保持请求消息|UP_MINKTEST_REQ|0x2005
链路管理类|链路连接保持应答消息|UP_LINKTEST_RSP|0x2006
链路管理类|链路断开通知消息|UP_DISCONNECT_INFORM|0x2007
链路管理类|下级平台主动关闭链路通知消息|UP_CLOSELINK_INFORM|0x2008
链路管理类|上级平台主动关闭链路通知消息|DOWN_CLOSELINK_INFORM|0x9008
车辆动态信息交换类|链路动态信息交换消息|UP_EXG_MSG|0x2100
信息统计类|统计信息交换消息|UP_SUM_MSG|0x2200
静态信息交换类|链路静态信息交换消息|UP_BASE_MSG|0x2300
- 第一章 开篇寄语
- 1-1 技术选型要点
- 1-2 认识905.4王国的交流规范
- 1-3 联系作者
- 第二章 Socket编程的基础知识
- 2-1 Socket家族的基石
- 2-2 byte数组基础
- 2-3 缓冲区基础
- 2-4 NIO Socket通讯的工作原理
- 第三章 905.4规范解读
- 3-1 基于通道选择器的Socket长连接及消息读写框架
- 3-2 严格的信件收发员
- 3-3 负责消息处理的一家子
- 3-4 负责认证的大儿子(AuthWorker)
- 3-5 哑巴老二(PingWoker)
- 3-6 勤奋的定位汇报员老三(LocationReportWorker)
- 3-7 精明的老四(BusinessReportWorker)
- 3-8 数据检察官——CRC16-CCITT校验
- 3-11 数据的加密官
- 3-12 头尾标识转义
- 第四章 测试方法
- 4-1 测试数据样例
- 4-2 客户端链路保持功能实现
- 4-3 使用Socket短连接进行功能测试
- 4-4 NIO服务端性能分析
- 4-5 http测试方法(推荐)
- 第五章 从NIO到netty
- 5-1 编程进阶——Netty核心基础
- 5-2 Netty使用常见问题
- 5-3 使用Netty重写Server端
- 5-4 Netty之链路管理
- 5-5 netty堆外内存泄漏如何应对?
- 第六章 统计与监控
- 6-1 Grafana监控面板
- 第七章 售后服务
- 7-1 勘误与优化
- 7-2 获取源码