認識SuperSocket 1.6.4


 SuperSocket 是一個輕量級的可擴展的 Socket 開發框架,由江振宇先生開發,之所以選用它是因為一下幾點恰好復合項目需求:

  • 開源,基於Apache 2.0協議,可以免費使用到商業項目.
  • 高性能的事件驅動通信.
  • 會話級別的發送隊列能夠讓你通過會話並發的發送數據,並保持高性能和可控性.
  • 強大且高性能的協議解析實現工具幫你簡化了網絡數據的分析工作:自帶多種數據幀過濾器,可實現自己的數據幀過濾器,可自定義數據內容協議,粘包拆包都是浮雲.
  • 輕量級意味着組件可以自由選擇使用,可根據環境變化變更.

 

 

 SuperSocket的架構和設計可以在官方的中文文檔查詢到http://docs.supersocket.net/v1-6/zh-CN/Architecture-Diagrams 

SuperSocket的工作流程如圖:

每個連接的客戶端都以session的方式管理,發送數據給客戶端也通過session的send方法,每個客戶端發過來的數據流都經過ReceiveFilter過濾器(這里即可自定義協議或者使用自帶的一些幀過濾器)到ReqestInfo,ReqestInfo包含了該條數據內容,當然如果是自定義的協議,可以實現自己的ReqestInfo,把數據包內容直接裝入幀對象.

 

 官方的文檔和demo也是花了一段時間才知道怎么使用達到項目需求的功能,由於項目是做采集設備數據的TCP服務器,通信幀格式也是比較常見的設計,所以大概個需求明白了,官方的文檔和demo里沒有詳細講解這一塊,但是也基本指引了我們該怎么去做這樣的一個服務程序.

首先,官方文檔最簡單示例是:Telnet服務器.

Telnet示例: 默認的AppServer是設計成了Telnet方式的協議,所以直接配置->啟動->注冊連接,斷開,數據接收事件->邏輯處理,就完成最簡單的功能了,用windows自帶的Telnet調試即可明白.同時學習SuperSocket的還有一點就是看下載的sourcecode的quickstrat項目,各種場景都涉及到了.

雖然SuperSocket是一個屌炸天的框架,但是默認的AppServer我相信還是不符合大部分人是開發場景,我只想用里面最普通的TCP服務器功能,收發下數據,管理下連接,又或者我要實現帶XXX協議的過濾的TCP服務器,我根本就不想用Telnet.所以,拓展AppServer那是必須的功課了.

為了減少碼農的工作量,有時間去泡妹子,偉大的SuperSocket真是無微不至,自帶了各種常見的幀過濾器,內置的常用協議實現模版如下:

  • TerminatorReceiveFilter (SuperSocket.SocketBase.Protocol.TerminatorReceiveFilter, SuperSocket.SocketBase)
  • CountSpliterReceiveFilter (SuperSocket.Facility.Protocol.CountSpliterReceiveFilter, SuperSocket.Facility)
  • FixedSizeReceiveFilter (SuperSocket.Facility.Protocol.FixedSizeReceiveFilter, SuperSocket.Facility)
  • BeginEndMarkReceiveFilter (SuperSocket.Facility.Protocol.BeginEndMarkReceiveFilter, SuperSocket.Facility)
  • FixedHeaderReceiveFilter (SuperSocket.Facility.Protocol.FixedHeaderReceiveFilter, SuperSocket.Facility)

以上模板的使用可參考官方文檔http://docs.supersocket.net/v1-6/zh-CN/The-Built-in-Common-Format-Protocol-Implementation-Templates

這里前幾個模板可能使用不是復雜,使用場景也比較少,至於BeginEndMarkReceiveFilter和FixedHeaderReceiveFilter的使用就稍微復雜,但是他們基本可以滿足比較常用的行業使用的協議.

 

后一篇將做一個demo使用FixedHeaderReceiveFilter來解析自定義的協議幀

 

本文由http://www.cnblogs.com/xiepeixing/原創,轉載請著名出處


免責聲明!

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



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