基於NIO的消息路由的實現(三)服務端與客戶端結構

1、服務器端結構:redis

如圖所示:服務器

  • 指令類和報文類:對下行的指令和上行的報文進行了類的封裝,分別實現IOrder和IPacket接口,繼承Order,Packet基類;spa

  • 服務主線程:接受客戶端鏈接,將客戶端發送的報文投遞到通信隊列中,發送指令給客戶端;保存鏈接對象(GVConnection)線程

  • 通信隊列CQ:存儲客戶端發送過來的報文,此報文由通信主線程放入;對象

  • 通信隊列消費者:對通信隊列中的報文進行處理,該作什麼作什麼,若是是短消息,則放入消息隊列MQ中單獨處理;繼承

  • 消息隊列消費者:對MQ中的短消息進行處理;若是轉發的目標客戶端沒有通道(channel),那麼就存入redis。(此部分目前還沒有實現)接口

  • 通道清理線程,針對超時的通道,已關閉的通道進行按期清理;此部分應該有更好地實現方式,請你們幫忙想一想吧。隊列

2、客戶端結構:
消息隊列


  • 指令和報文類同上;io

  • 鏈路維護線程:每隔必定的時間發送給服務端K報文,用於鏈路檢測,若是超過服務端的連續迴應次數超過必定的限制(好比,連續三次沒有迴應),那麼,視爲已經掉線;

  • 短線重連線程:兩種狀況會引起重連:一、服務端主動切斷通道;這來是可捕獲的;二、異常中斷(依靠鏈路維護);

相關文章
相關標籤/搜索