使用netty實現的tcp通信中如何實現同步返回

在netty實現的tcp通信中,一切都是異步操做,這提升了系統性能,可是,有時候client須要同步等待消息返回,如何實現呢?筆者已經實現,在此總結下重點要素api

實現要點:緩存

一、消息結構設計服務器

     消息頭中須要有id和correspondId,即消息id和響應id,使用UUID實現。message發出去的時候需設置id,服務器接收到message處理業務,響應消息中的correspondId設置成原消息的id;異步

二、採用CountDownLatch實現線程同步等待;tcp

流程示意圖:性能

一、業務系統調用統一api發送消息;線程

二、消息發送服務將消息緩存到消息管理器,緩存鍵值爲id;設計

三、消息發送服務將消息發送到服務器,同時線程進入休眠等待,還能夠設置timeout;netty

四、服務器處理消息後,將響應消息寫到tcp流;blog

五、消息接收服務接收到消息後,判斷消息correspondId是否有值,若是有值,則說明有一個線程在等待該消息返回,根據correspondId找到該線程喚醒運行,此刻服務調用即獲得返回值;

六、correspondId爲空的話,則將消息給業務系統處理。

 

 

 

 

 

 

相關文章
相關標籤/搜索