什么是SuperSocket
SuperSocket(下文簡稱SS)是一個輕量級, 跨平臺而且可擴展的 .Net/Mono Socket 服務器程序框架。你無須了解如何使用 Socket, 如何維護 Socket 連接和 Socket 如何工作,但是你卻可以使用 SuperSocket 很容易的開發出一款 Socket 服務器端軟件,例如游戲服務器,GPS 服務器, 工業控制服務和數據采集服務器等等。
功能特點
- 高性能的事件驅動通信;
- 非常簡單易用; 你只需要通過創建幾個類就能獲得一個健壯的 Socket 服務器;
- 內置的命令行協議讓你能夠迅速創建一個網絡命令行接口服務器;
- 強大且高性能的協議解析實現工具幫你簡化了網絡數據的分析工作;
- 靈活的配置功能和友好的配置 API;
- 多監聽器支持; 讓你在一個服務器實例內監聽多個端口;
- 多服務器實例托管的支持讓你從容面對復雜的部署需求;
- 應用程序域和進程級別的隔離能夠滿足你大部分的宿主場景;
- 內置的 SSL/TLS 加密支持;
- 會話級別的發送隊列能夠讓你通過會話并發的發送數據,并保持高性能和可控性;
- SuperSocket 的命令處理模式讓你的業務邏輯更清晰,更有條理;
- 優良的可擴展 API 支持: Command Filter, Connection Filter, Command Loader;
- 可替換的日志架構允許你使用你喜歡的日志組件;
- 動態語言的支持; 允許你用 Python 之類的腳本語言來實現命令;
- 與 Mono/linux 保持二進制級別的兼容;
- Windows Azure 的支持;
- 內置你可以直接用于 Flash 或 Silverlight 客戶端的 Socket 策略服務器;
本人前言
SS基于.NET IOCP的AsyncSocketEventArgs進行開發設計,很多朋友在群里問SS性能怎樣,我覺得這個問題還是需要根據您自己的程序來看,如果單從例子來看,網上有很多AsyncSocketEventArgs的性能,也有例子,大可測試。嘿嘿。
如果需要深入了解SS并凌駕于SS進行開發以及關注本人后續文章的相關內容,需要對SOCKET、泛型、Lambda表達式以及事件驅動有一定的了解,這些知識將不會另行講解。
初次接觸SS的小伙伴,SS是輕量級的、基于事件驅動級的框架,使用前請先看看官方網站上的文檔,如果您覺得看文檔是浪費時間的話,那您還是直接使用原生Socket,AsyncSocketEventArgs或者TcpListener之類的,簡單、便捷。
很多小伙伴想使用自己的協議,那就更應該仔細認真的看看文檔了(使用 IRequestInfo 和 IReceiveFilter 等等其他對象來實現自定義協議),如果想追求快,而又搞不懂如果實現自定義,個人真不建議你使用SS了,同上。
SuperSocket 請求處理模型示意圖

這部分已經概括了SS的流程,只是少了一部ConnectionFilter,應該在Client->SocketListener的時候,如果實現了連接過濾器會在客戶端connect的時候先進行篩選。
在群里,很多小伙伴們經驗問收不到數據,這是為什么呢?首先理解什么是通信協議,簡單來講,就是把收到2進制數據轉換成規則,如上圖所示,客戶端發送一條2進制代碼的時候,經過ReceiveFilter的過濾,解析符合規則的2進制內容,并轉換成所對應的對象,然后執行處理。
★SS內置了常用的一些協議,如下:
- 命令行協議:也是AppServer的默認協議,每條協議都以換行/r/n結束,格式:Command Arg1 Arg2 ArgN/r/n,注意:很多小伙伴都忘記了后面的/r/n。還有很多小伙伴中文會出現亂碼,出現亂碼是因為默認配置的textEncoding為ASCII,改成UTF-8或GBK即可。
- 結束符協議(TerminatorReceiveFilter):與命令行協議類似,一些協議用結束符來確定一個請求,格式:AnyData....##,以##結尾的數據。
- 固定數量分隔符協議(CountSpliterReceiveFilter):有些協議定義了像這樣格式的請求,格式:#part1#part2#part3#part4#part5#part6#part7#。 每個請求有7個由#分隔的部分。
- 固定請求大小的協議(FixedSizeReceiveFilter):在這種協議之中, 所有請求的大小都是相同的。如果你的每個請求都是有9個字符組成的字符串,如KILL BILL。
- 帶起止符的協議(BeginEndMarkReceiveFilter):在這類協議的每個請求之中 都有固定的開始和結束標記,格式:!xxxxxxxxxxxxxx$,'!'是開始標記,'$'是結束標記。
- 頭部格式固定并且包含內容長度的協議(FixedHeaderReceiveFilter):這種協議將一個請求定義為兩大部分,如第一部分定義了請求名稱,第二部包含后面內容的長度以及第三部分的具體內容。如:|name(4)|len(2)|content|,4字節的名稱、2字節的內容長度,具體的內容。
官方網站:http://www.supersocket.net
官方文檔地址:http://docs.supersocket.net
SuperSocket用戶QQ群:373076764(500人,入群需回答正確的答案,否則一律拒絕)
======================================================================================================