1、服務器端結構:redis
如圖所示:服務器
指令類和報文類:對下行的指令和上行的報文進行了類的封裝,分別實現IOrder和IPacket接口,繼承Order,Packet基類;spa
服務主線程:接受客戶端鏈接,將客戶端發送的報文投遞到通信隊列中,發送指令給客戶端;保存鏈接對象(GVConnection)線程
通信隊列CQ:存儲客戶端發送過來的報文,此報文由通信主線程放入;對象
通信隊列消費者:對通信隊列中的報文進行處理,該作什麼作什麼,若是是短消息,則放入消息隊列MQ中單獨處理;繼承
消息隊列消費者:對MQ中的短消息進行處理;若是轉發的目標客戶端沒有通道(channel),那麼就存入redis。(此部分目前還沒有實現)接口
通道清理線程,針對超時的通道,已關閉的通道進行按期清理;此部分應該有更好地實現方式,請你們幫忙想一想吧。隊列
2、客戶端結構:
消息隊列
指令和報文類同上;io
鏈路維護線程:每隔必定的時間發送給服務端K報文,用於鏈路檢測,若是超過服務端的連續迴應次數超過必定的限制(好比,連續三次沒有迴應),那麼,視爲已經掉線;
短線重連線程:兩種狀況會引起重連:一、服務端主動切斷通道;這來是可捕獲的;二、異常中斷(依靠鏈路維護);