1.1 基本設(shè)計(jì)概念和處理流程
主要分為服務(wù)端和客戶端兩個(gè)部分。
客戶端部分又分為同步與異步兩種模式。
JAVA版接口平臺(tái)主要實(shí)現(xiàn)與外部接口的服務(wù)端和客戶端的通訊。并提供業(yè)務(wù)接口,允許基于當(dāng)前內(nèi)核實(shí)現(xiàn)各種業(yè)務(wù)。
本平臺(tái)設(shè)計(jì)的核心思想是實(shí)現(xiàn)通訊平臺(tái)的核心功能,盡可能使代碼與業(yè)務(wù)剝離,提高代碼的可重用性。
本平臺(tái)主要由幾個(gè)核心模塊所組成對(duì)各種業(yè)務(wù)的支持
使用JAVA1.4+版本提供的無堵塞IO實(shí)現(xiàn)服務(wù)端和客戶端的通訊,并提供同步和異步處理兩種方式
使用了JDK 1.5 帶的線程池,提供一個(gè)線程池的服務(wù),為服務(wù)端或客戶端提供多線程處理的功能。本身實(shí)現(xiàn)了Singleton模式和自帶了監(jiān)控線程,實(shí)現(xiàn)了自我管理。
為解析協(xié)議提供簡(jiǎn)便的方法處理字節(jié)數(shù)組。
為了實(shí)現(xiàn)通信平臺(tái)的業(yè)務(wù)無關(guān)性,本平臺(tái)設(shè)計(jì)了一些接口提供給業(yè)務(wù)開發(fā)實(shí)現(xiàn)。
為所有解析協(xié)議提供統(tǒng)一協(xié)議解析類接口。主要是為了統(tǒng)一協(xié)議解析的方式。
業(yè)務(wù)接口主要有兩種:業(yè)務(wù)邏輯接口和業(yè)務(wù)實(shí)現(xiàn)接口。
2.3.2.1 業(yè)務(wù)邏輯接口
主要為了處理每一個(gè)指令的業(yè)務(wù)流程,例如先讀取,再處理業(yè)務(wù),再返回結(jié)果;或者先發(fā)送指令,再等待返回結(jié)果。
2.3.2.2 業(yè)務(wù)實(shí)現(xiàn)接口
主要處理每個(gè)協(xié)議中每一個(gè)指令所對(duì)應(yīng)的業(yè)務(wù)網(wǎng)處理。
專門為客戶端登錄服務(wù)器時(shí)提供的統(tǒng)一的注冊(cè)方式。
l 通訊服務(wù)
l 并發(fā)處理客戶端請(qǐng)求
l 自監(jiān)控
l 可自定義的業(yè)務(wù)接口
l 與服務(wù)端通訊
l 可自定義的業(yè)務(wù)接口
l 支持異步模式
通過繼承一個(gè)業(yè)務(wù)邏輯類接口和一個(gè)抽象業(yè)務(wù)邏輯類實(shí)現(xiàn)統(tǒng)一的業(yè)務(wù)邏輯接口實(shí)現(xiàn)。主要功能有:
l 讀取請(qǐng)求內(nèi)容
l 發(fā)送請(qǐng)求
l 讀取配置文件
l 協(xié)議解析
l 反射調(diào)用業(yè)務(wù)實(shí)現(xiàn)接口
對(duì)于單個(gè)指令的業(yè)務(wù)實(shí)現(xiàn)
通過繼承客戶端類,通過調(diào)用通訊接口實(shí)現(xiàn)客戶端的業(yè)務(wù)流程,主要功能有:
l 發(fā)送指令
l 接收指令
l 重置連接
客戶端連接到服務(wù)端時(shí)會(huì)自動(dòng)判斷是否正常連接,如果在通訊過程中,發(fā)現(xiàn)網(wǎng)絡(luò)中斷,將重新發(fā)起一個(gè)連接請(qǐng)求,并自動(dòng)注冊(cè)到服務(wù)器上。
客戶端提供異步通信和同步通信。在同步通信是一個(gè)線程堵塞的方法,該方法會(huì)等待結(jié)果的返回才退出該方法。但如果等待時(shí)間超過配置的超時(shí)時(shí)間,會(huì)拋出一個(gè)通信超時(shí)的異常,并退出該方法。
服務(wù)端處理請(qǐng)求都是使用線程池處理每個(gè)客戶端的請(qǐng)求。在客戶端通訊的過程中如果連接斷開了,或者發(fā)生了一些特定的異常,則線程池監(jiān)控線程會(huì)將該線程中的連接斷開,并將線程回收到線程池中。
實(shí)現(xiàn)一個(gè)協(xié)議接口和一個(gè)協(xié)議抽象類,每個(gè)通信節(jié)點(diǎn)所使用的協(xié)議都必須實(shí)現(xiàn)該接口,里面封裝了一些協(xié)議基本的信息和一些基本的協(xié)議解析方法。主要包含方法:
l 協(xié)議完整性校驗(yàn)接口
l 指令解析接口
l 設(shè)置包頭長(zhǎng)度
l 設(shè)置包體長(zhǎng)度
l 設(shè)置包尾長(zhǎng)度
實(shí)現(xiàn)一個(gè)協(xié)議里每個(gè)指令的調(diào)用,設(shè)計(jì)目的是將指令的字符轉(zhuǎn)化為對(duì)象,可以方便地面向?qū)ο箝_發(fā)。主要包含方法:
l 指令初始化接口
l 請(qǐng)求參數(shù)接口
l 應(yīng)答參數(shù)接口
所有的日志信息和出錯(cuò)信息會(huì)拋出到同一個(gè)方法中,由系統(tǒng)統(tǒng)一處理。