精品課程網(wǎng)站建設(shè)論文重慶網(wǎng)站seo技術(shù)
自定義基于TCP的應(yīng)用層通信協(xié)議。實(shí)現(xiàn)客戶端對服務(wù)器的遠(yuǎn)程調(diào)用
編寫服務(wù)器及客戶端代碼
文章目錄
- 基于TCP的自定義應(yīng)用層協(xié)議
- 一、請求
- 1.請求格式
- 2.創(chuàng)建Request類
- 二、響應(yīng)
- 1.響應(yīng)格式
- 2.創(chuàng)建Response類
- 三、客戶端-服務(wù)器交互
- 四、type
- 五、請求payload
- 1.BasicAruguments(方法公共參數(shù))
- 2.每個方法的參數(shù)
- ExchangeDelareArguments
- ExchangeDeleteArguments
- QueueDeclareArguments
- QueueDeleteArguments
- QueueBindArguments
- QueueUnbindArguments
- BasicPublishArguments
- BasicConsumeArguments
- BasicAckArguments
- 六、響應(yīng)payload
- 1.BasicReturns(返回結(jié)果公共參數(shù))
- 2.SubscribeReturns
- 編寫服務(wù)器代碼
- 一、創(chuàng)建BrokerServer
- 二、初始化ServerSocket
- 三、開啟服務(wù)器
- 四、停止服務(wù)器(便于測試)
- 五、處理連接
- 1.讀取請求并解析
- 2.根據(jù)請求計(jì)算響應(yīng)
- 3.將響應(yīng)返回給客戶端
- 4.清除有關(guān)斷開連接的socket對應(yīng)的會話信息
- 編寫客戶端代碼
- 一、ConnectionFactory 連接工廠
- 創(chuàng)建Connection對象
- 二、Connection 一次TCP連接
- 1.Connection 屬性
- 2.初始化
- 3.寫入請求
- 4.讀取響應(yīng)
- 5.創(chuàng)建channel
- 6.處理響應(yīng)
- 7.關(guān)閉連接
- 三、Channel 邏輯上的連接
- 1.屬性
- 2.API(遠(yuǎn)程調(diào)用服務(wù)器的)
- 創(chuàng)建channel
- 銷毀channel
- 創(chuàng)建交換機(jī)
- 刪除交換機(jī)
- 創(chuàng)建隊(duì)列
- 刪除隊(duì)列
- 創(chuàng)建綁定
- 刪除綁定
- 發(fā)布消息
- 訂閱消息
- 確認(rèn)消息
- 3.實(shí)現(xiàn)阻塞等待服務(wù)器的響應(yīng)
- waitResult
- putResult
- 編寫Demo
- 1.生產(chǎn)者客戶端
- 2.消費(fèi)者客戶端
- 測試
- 1. 啟動服務(wù)器
- 2.啟動生產(chǎn)者
- 3.啟動消費(fèi)者
基于TCP的自定義應(yīng)用層協(xié)議
一、請求
1.請求格式
type:哪個方法
length:payload的長度
payload:調(diào)用的方法的參數(shù)
2.創(chuàng)建Request類
二、響應(yīng)
1.響應(yīng)格式
type:哪個方法
length:payload的長度
payload:調(diào)用的方法的結(jié)果
2.創(chuàng)建Response類
三、客戶端-服務(wù)器交互
四、type
- 0X1 創(chuàng)建channel
- 0X2 銷毀channel
- 0X3 創(chuàng)建交換機(jī) exchangeDeclare
- 0X4 刪除交換機(jī) exchangeDelete
- 0X5 創(chuàng)建隊(duì)列 queueDeclare
- 0X6 刪除隊(duì)列 queueDelete
- 0X7 創(chuàng)建綁定 queueBind
- 0X8 刪除綁定 queueUnbind
- 0X9 發(fā)布消息 basicPublish
- 0Xa 訂閱消息 basicConsume
- 0xb 確認(rèn)消息 basicAck
- 0xc 服務(wù)器給客戶端推送消息(響應(yīng)獨(dú)有)
五、請求payload
1.BasicAruguments(方法公共參數(shù))
- rid(一次請求/響應(yīng))
- channelId(一次邏輯上的連接)
2.每個方法的參數(shù)
需要繼承BasicArguments
ExchangeDelareArguments
ExchangeDeleteArguments
QueueDeclareArguments
QueueDeleteArguments
QueueBindArguments
QueueUnbindArguments
BasicPublishArguments
BasicConsumeArguments
BasicAckArguments
以ExchangeDeclare方法為例,具體的請求格式如下:
六、響應(yīng)payload
1.BasicReturns(返回結(jié)果公共參數(shù))
- rid (一次請求/響應(yīng))
- channelId (一次邏輯上的連接)
- ok (方法運(yùn)行結(jié)果)
以exchangeDeclare為例,具體的響應(yīng)格式:
其他的方法返回的響應(yīng)payload都是BasicReturns序列化后的結(jié)果,除了0xc,是響應(yīng)獨(dú)有的。
2.SubscribeReturns
服務(wù)器通過Consumer接口實(shí)現(xiàn)推送消息給客戶端(隊(duì)列收到消息的時(shí)候會調(diào)用回調(diào)方法)
響應(yīng)具體格式:
編寫服務(wù)器代碼
一、創(chuàng)建BrokerServer
二、初始化ServerSocket
給Serversocket初始化,監(jiān)聽一個端口
三、開啟服務(wù)器
- 接受客戶端的連接請求
- 線程池處理連接
四、停止服務(wù)器(便于測試)
- runnable設(shè)置成false
- 拋棄線程池的所有任務(wù)
- 關(guān)閉ServerSocket服務(wù)器連接
五、處理連接
- 讀取請求并解析
- 根據(jù)請求計(jì)算響應(yīng)
- 將響應(yīng)返回給客戶端
- 關(guān)閉客戶端連接
- 清除斷開連接的socket的會話信息(channelId-socket)
1.讀取請求并解析
2.根據(jù)請求計(jì)算響應(yīng)
3.將響應(yīng)返回給客戶端
4.清除有關(guān)斷開連接的socket對應(yīng)的會話信息
編寫客戶端代碼
一、ConnectionFactory 連接工廠
- 服務(wù)器地址
- 創(chuàng)建connecion對象
創(chuàng)建Connection對象
二、Connection 一次TCP連接
- socket對象 socket=new socket(host,port)
- 多個channel 對象 (創(chuàng)建channel對象)
- 寫入請求
- 讀取響應(yīng)
- 處理響應(yīng)
1.Connection 屬性
2.初始化
3.寫入請求
4.讀取響應(yīng)
5.創(chuàng)建channel
6.處理響應(yīng)
此處在構(gòu)造方法中,補(bǔ)充創(chuàng)建一個掃描線程,當(dāng)連接未斷開時(shí),不停的掃描(讀取)服務(wù)器返回的響應(yīng)。處理響應(yīng)。
如果是SubScirbleReturns,使用線程池執(zhí)行消費(fèi)者的回調(diào)。
如果是BasicReturns,將響應(yīng)的basicReturns放入對應(yīng)channel的basicReturnsMap中。
7.關(guān)閉連接
三、Channel 邏輯上的連接
- 對應(yīng)API,實(shí)現(xiàn)客戶端對服務(wù)器的遠(yuǎn)程調(diào)用
1.屬性
2.API(遠(yuǎn)程調(diào)用服務(wù)器的)
- 構(gòu)造請求
- 寫入請求
- 阻塞等待服務(wù)器的響應(yīng)結(jié)果
生成rid:
創(chuàng)建channel
銷毀channel
創(chuàng)建交換機(jī)
刪除交換機(jī)
創(chuàng)建隊(duì)列
刪除隊(duì)列
創(chuàng)建綁定
刪除綁定
發(fā)布消息
訂閱消息
確認(rèn)消息
3.實(shí)現(xiàn)阻塞等待服務(wù)器的響應(yīng)
waitResult
根據(jù)rid,在basicReturnsMap集合中找;如果找到了,就返回,找不到阻塞等待。
putResult
將rid-basicReturns 放入basicReturnsMap集合中
編寫Demo
實(shí)現(xiàn)消息隊(duì)列生產(chǎn)者-消費(fèi)者模型。
1.生產(chǎn)者客戶端
2.消費(fèi)者客戶端
測試
1. 啟動服務(wù)器