SuperSocket源码解析之开篇
一 簡介
官方介紹:SuperSocket 是一個輕量級, 跨平臺而且可擴展的 .Net/Mono Socket 服務(wù)器程序框架。你無須了解如何使用 Socket, 如何維護 Socket 連接和 Socket 如何工作,但是你卻可以使用 SuperSocket 很容易的開發(fā)出一款 Socket 服務(wù)器端軟件,例如游戲服務(wù)器,GPS 服務(wù)器, 工業(yè)控制服務(wù)和數(shù)據(jù)采集服務(wù)器等等。
地址:http://www.supersocket.net/
? ? ?目前所閱讀的版本是:1.6.4.0
本筆記的基本思路為:Supersocket是什么,主要功能,組成結(jié)構(gòu),啟動過程,工作機制,如何高性能,如何高并發(fā),以及如何可擴展等方面進行
二 ?基礎(chǔ)知識
1 Net4.0以上編程基礎(chǔ),熟悉lamada表達式,Tpl多核并行異步編程,泛型編程(非常重要),多線程(線程池),反射,特性等基礎(chǔ)知識;
2 熟悉常見的設(shè)計模式,工廠模式,命令模式,代理模式,其中工廠模式在SuperSocket配置系統(tǒng)中大量使用,也是具有高擴展性重要基礎(chǔ)之一;
3 Tcp/ip基本概念,通信過程;
4 IOCP(完成端口)相關(guān)概念;
5 Log4Net日志組件;
6 常見的服務(wù)器會話機制;
?
三 主要功能
? 如官方介紹所言,可以作為輕量級的服務(wù)器程序框架,其核心在于進程之間通過Socket進行通信達到數(shù)據(jù)交換的目的,當(dāng)然也可以作為一款三方通信組件,其主要作用在于建立服務(wù)端與客戶端或者其他端點的通信,管理,維護,并提供常見的通信協(xié)議,解析等,也可以自定義協(xié)議和協(xié)議處理相關(guān)接口,所以說SuperSocket在首先滿足通信前提下同時提供常見的協(xié)議處理,也提供直接作為應(yīng)用程序的服務(wù)器應(yīng)用程序框架。
?
四 ?組成結(jié)構(gòu)
援引官方的對象模型示意圖可以知道,SuperSocket主要分為SocketServer,AppServer以及與之對應(yīng)的SocketSession、AppSession組成
1 其中SocketServer是SocketSession的容器,負(fù)責(zé)SocketSession的管理(創(chuàng)建,初始化,啟動,關(guān)閉等);
?
2 SocketSession則是一個最小的通信單元也就是客戶端與服務(wù)端一個Socket一條通信信道封裝,負(fù)責(zé)消息發(fā)送,接收;
?
3 AppServer則是服務(wù)器的一個工作單元,一個服務(wù)器可以有多個AppServer共同組成,實現(xiàn)對不同端口進行Tcp或者Udp鏈接監(jiān)聽,并作為AppSession的容器和管理者,負(fù)責(zé)AppSession創(chuàng)建,初始化,啟動,關(guān)閉等管理,向外界提供配置接口,日志接口,命令接口,連接過濾接口,接收過濾接口等等;
?
4 相應(yīng)的AppSession則是工作在SocketSession上層的服務(wù)器會話單元,其主要職能在于負(fù)責(zé)將接收到的數(shù)據(jù)進行過濾,解析,以及路由到命令并執(zhí)行,如上圖所示
?
五 工作機制
?
個人覺得上圖從左至右第一個Session應(yīng)細(xì)化成SocketSession更合適。
其工作機制也就是服務(wù)器何時開始工作,怎樣工作,怎樣處理接收和發(fā)送消息,這里可以參考官方給出的請求處理模型示意圖,其具體步驟如下所述
1 SocketSession會話階段
服務(wù)器啟動監(jiān)聽器,進入監(jiān)聽狀態(tài)等待客戶端連接,當(dāng)接收到一個客戶端請求,驗證并創(chuàng)建一個SocketSession會話;
2 AppSession會話階段
? 當(dāng)接收到客戶端一個Socket請求,封裝成一個SocketSession時該會話已具備收發(fā)消息的能力,但是要處理數(shù)據(jù)還得有AppSession來處理,所以由AppServer根據(jù)SocketSeeion創(chuàng)建AppSession,并讓該會話啟動開始工作
3 消息處理階段
當(dāng)SocketSession接收到一個消息時,將交由AppSession進行處理,首先進行原始數(shù)據(jù)完整性和過濾特性進行處理,主要過濾掉一些不合法的消息或者被特性標(biāo)記的,并將消息交由IReciveFilter進行協(xié)議解析封裝成RequestInfo一類的結(jié)構(gòu),再路由給具體的命令執(zhí)行單元進行具體處理執(zhí)行
?
以上三步驟將客戶端發(fā)送一條消息或者說一個數(shù)據(jù)包,在經(jīng)歷接收,檢查,解析,命令處理過程,這些步驟經(jīng)由SocketSession和AppSession工作在一個由AppServer負(fù)責(zé)啟動的一個線程單元中,也就是說每一個 會話都將是一個線程在負(fù)責(zé),而這些線程是交由ThreadPool負(fù)責(zé)管理,所以通篇都看不到一個顯式的Thread創(chuàng)建并啟動代碼
?
六 ?示例
在官方源碼QuickStart文件夾中給出了一些列完整示例,可以直接啟動并接收簡單消息的處理,這些示例可以參考到文檔中結(jié)合起來理解和使用
相關(guān)文章:
SuperSocket, 可擴展的 Socket 服務(wù)器框架
開源項目SuperSocket的學(xué)習(xí)筆記
使用LogMaster4Net實現(xiàn)應(yīng)用程序日志的集中管理
SuperSocket與Netty之實現(xiàn)protobuf協(xié)議,包括服務(wù)端和客戶端
原文地址:http://www.cnblogs.com/rjjs/p/5618773.html
.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關(guān)注
總結(jié)
以上是生活随笔為你收集整理的SuperSocket源码解析之开篇的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET Core也可以使用MongoD
- 下一篇: EntityFramework和Enti