前言
本小節是NetworkSocket系列的第9小節,在閱讀本小節之前,您可能需要先閱讀前面的幾個小節,否則可能覺得內容跳轉比較大。
描述
TcpServerBase<TDataEvenArgs>是所有Tcp伺服器對象的基礎類,它將固有的用戶端串連監聽、線上用戶端對象維護、用戶端串連斷開、關閉用戶端串連這些操作已經封裝好,對於具體協議的伺服器,只要派生於此類,編寫協議描述就可以了。
類圖
設計思路
效能:TcpServerBase<TDataEventArgs>使用SocketAsyncPool<TDataEventArgs>來儲存一定數量的SocketAsync<TDataEventArgs>,當用戶端串連後監聽到串連Socket,從中取出一個SocketAsync用來綁定Socket,當這個Socket中斷連線後,釋放SocketAsync綁定的Socket,並把SocketAsync放回到pool中,達到迴圈利用SocketAsync裡面的兩個SocketAsyncEventArgs對象。
方便:TcpServerBase<TDataEventArgs>在用戶端串連或類型後,都觸發對就的OnConnect或OnDisconnect事件,事件的一個參數就是SocketAsync<TDataEventArgs>類型,表示當前用戶端。同時自動維護線上的用戶端,存放於AliveClients集合中。
靈活:TcpServerBase<TDataEventArgs>不依賴於具體的封包方法(協議),將變化的協議通過TDataEventArgs做為泛型參婁傳進來,提供protected virtual TDataEventArgs AnalysisRecvData(ByteBuilder recvBuilder)方法,給衍生類別重寫解析資料。
總結
TcpServerBase<TDataEventArgs>和SocketAsync<TDataEventArgs>設計思路差不多,將固有的方法和屬性封裝,易於調用,將可變的協議做為泛型參數傳進來,並提供virtual AnalysisRecvData方法給衍生類別重寫解析資料的方法。