SuperSocket源碼解析之開篇


一 簡介

  官方介紹:SuperSocket 是一個輕量級, 跨平台而且可擴展的 .Net/Mono Socket 服務器程序框架。你無須了解如何使用 Socket, 如何維護 Socket 連接和 Socket 如何工作,但是你卻可以使用 SuperSocket 很容易的開發出一款 Socket 服務器端軟件,例如游戲服務器,GPS 服務器, 工業控制服務和數據采集服務器等等。

  地址:http://www.supersocket.net/

     目前所閱讀的版本是:1.6.4.0

  本筆記的基本思路為:Supersocket是什么,主要功能,組成結構,啟動過程,工作機制,如何高性能,如何高並發,以及如何可擴展等方面進行

二  基礎知識

1 Net4.0以上編程基礎,熟悉lamada表達式,Tpl多核並行異步編程,泛型編程(非常重要),多線程(線程池),反射,特性等基礎知識;

2 熟悉常見的設計模式,工廠模式,命令模式,代理模式,其中工廠模式在SuperSocket配置系統中大量使用,也是具有高擴展性重要基礎之一;

3 Tcp/ip基本概念,通信過程;

4 IOCP(完成端口)相關概念;

5 Log4Net日志組件;

6 常見的服務器會話機制;

 

三 主要功能

  如官方介紹所言,可以作為輕量級的服務器程序框架,其核心在於進程之間通過Socket進行通信達到數據交換的目的,當然也可以作為一款三方通信組件,其主要作用在於建立服務端與客戶端或者其他端點的通信,管理,維護,並提供常見的通信協議,解析等,也可以自定義協議和協議處理相關接口,所以說SuperSocket在首先滿足通信前提下同時提供常見的協議處理,也提供直接作為應用程序的服務器應用程序框架。

 

四  組成結構

援引官方的對象模型示意圖可以知道,SuperSocket主要分為SocketServer,AppServer以及與之對應的SocketSession、AppSession組成

1 其中SocketServer是SocketSession的容器,負責SocketSession的管理(創建,初始化,啟動,關閉等);

 

2 SocketSession則是一個最小的通信單元也就是客戶端與服務端一個Socket一條通信信道封裝,負責消息發送,接收;

 

3 AppServer則是服務器的一個工作單元,一個服務器可以有多個AppServer共同組成,實現對不同端口進行Tcp或者Udp鏈接監聽,並作為AppSession的容器和管理者,負責AppSession創建,初始化,啟動,關閉等管理,向外界提供配置接口,日志接口,命令接口,連接過濾接口,接收過濾接口等等;

 

4 相應的AppSession則是工作在SocketSession上層的服務器會話單元,其主要職能在於負責將接收到的數據進行過濾,解析,以及路由到命令並執行,如上圖所示

 

五 工作機制

  

 

  個人覺得上圖從左至右第一個Session應細化成SocketSession更合適。

其工作機制也就是服務器何時開始工作,怎樣工作,怎樣處理接收和發送消息,這里可以參考官方給出的請求處理模型示意圖,其具體步驟如下所述

1 SocketSession會話階段

 服務器啟動監聽器,進入監聽狀態等待客戶端連接,當接收到一個客戶端請求,驗證並創建一個SocketSession會話;

2 AppSession會話階段

  當接收到客戶端一個Socket請求,封裝成一個SocketSession時該會話已具備收發消息的能力,但是要處理數據還得有AppSession來處理,所以由AppServer根據SocketSeeion創建AppSession,並讓該會話啟動開始工作

3 消息處理階段

 當SocketSession接收到一個消息時,將交由AppSession進行處理,首先進行原始數據完整性和過濾特性進行處理,主要過濾掉一些不合法的消息或者被特性標記的,並將消息交由IReciveFilter進行協議解析封裝成RequestInfo一類的結構,再路由給具體的命令執行單元進行具體處理執行

 

以上三步驟將客戶端發送一條消息或者說一個數據包,在經歷接收,檢查,解析,命令處理過程,這些步驟經由SocketSession和AppSession工作在一個由AppServer負責啟動的一個線程單元中,也就是說每一個 會話都將是一個線程在負責,而這些線程是交由ThreadPool負責管理,所以通篇都看不到一個顯式的Thread創建並啟動代碼

 六 層次划分

 

七  示例

在官方源碼QuickStart文件夾中給出了一些列完整示例,可以直接啟動並接收簡單消息的處理,這些示例可以參考到文檔中結合起來理解和使用

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM