[TOC]
> 遙知兄弟登高處,遍插茱萸少一人。
在計算機技術棧的世界里,其實也有故事。今天就讓我們來一起窺探這個IT技術界**JT/T 905.4-2014**王國(以下簡稱905.4王國)的生存故事。
## 基礎概念解析
### 上、下級平臺與終端數據
>[warning] 開始之前,我們先區分一下終端、上級平臺、下級平臺之間的關系。本小冊實現的是上級平臺的部分,當然對于下級平臺的實現也有一定的借鑒意義。

各廠家終端提供的數據一定有自己的規范,所以為了實現行業數據的整合、共享,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 獲取源碼