SuperSocket快速入門(三):實現你的AppServer和AppSession

來源:互聯網
上載者:User

標籤:

什麼是AppSession?

  AppSession 代表一個和用戶端的邏輯串連,基於串連的操作應該定於在該類之中。你可以用該類的執行個體發送資料到用戶端,接收用戶端發送的資料或者關閉串連。同時可以儲存用戶端所關聯的資料。

什麼是AppServer?

  AppServer 代表了監聽用戶端串連,承載TCP已連線的服務器執行個體。理想情況下,我們可以通過AppServer執行個體擷取任何你想要的用戶端串連,伺服器層級的操作和邏輯應該定義在此類之中。

第一步:建立你的AppSession

  為什麼要建立AppSession呢,本人認為,快速入門系統,以下三點足夠你用的了。

  1. 需要重新實現會話建立、收到未知的協議資料的時候、處理異常等可重載的方法,像異常,只是做了記錄日誌操作,部分方法都是不處理。
  2. 需要關聯一些資料,同時AppSession提供了可存放最多10個資料的Items的屬性(IDictionary<object, object>類型)。
  3. 需要其他對象來實現自訂協議。
 1 // 在下面的代碼中,當一個新的串連串連上時,伺服器端立即向用戶端發送歡迎資訊。 這段代碼還重寫了其它AppSession的方法用以實現自己的商務邏輯。 2 public class TelnetSession : AppSession<TelnetSession> 3 { 4     // 重載OnSessionStarted函數,贊同於appServer.NewSessionConnected += NewSessionConnected 5     protected override void OnSessionStarted() 6     { 7         // 會話連結成功後的邏輯部分。 8         this.Send("Welcome to SuperSocket Telnet Server"); 9     }10 11     protected override void HandleUnknownRequest(StringRequestInfo requestInfo)12     {13         // 收到未知請求的邏輯部分14         this.Send("Unknow request");15     }16 17     protected override void OnSessionClosed(CloseReason reason)18     {19         // 會話關閉後的邏輯代碼20         base.OnSessionClosed(reason);21     }22 }23 24 // 你可以根據你的業務需求來給Session類增加新的屬性25 public class PlayerSession :AppSession<PlayerSession>26 {27     public int GameHallId { get; internal set; }28 29     public int RoomId { get; internal set; }30 }

上述代碼中,兩個自訂的AppSession都是使用的命令列協議。由於泛型約束,在自訂AppSession的時候,泛型TAppSession一定要指定所定義的類,很多朋友像命令無法載入啦、伺服器啟動不起來等等,都是因為這裡定義錯誤造成的。

有朋友就會問了,為什麼不能直接繼承AppSession呢?不好意思,快速入門系列不做補腦,在第一章的內容中已經說過。

第二步:建立你的AppServer類型

如果你建立自己的AppSession並希望使用它,那麼必須要建立所對應的AppServer。

 1 // 現在 TelnetSession 將可以用在 TelnetServer 的會話中,也有很多方法可以重載 2 public class TelnetServer : AppServer<TelnetSession> 3 { 4     protected override bool Setup(IRootConfig rootConfig, IServerConfig config) 5     { 6         // 對家設定檔進行相應的修改。 7         return base.Setup(rootConfig, config); 8     } 9 10     protected override void OnStartup()11     {12         // 伺服器啟動的邏輯部分13         base.OnStartup();14     }15 16     protected override void OnStopped()17     {18         // 停止伺服器的邏輯部分19         base.OnStopped();20     }21 }
第三步:啟動你的伺服器

還記錄上一節我們講的內容,如何啟動你的SS嗎?

// 第一種方法,代碼啟動。static void Main(string[] args){    // 注意是TelnetServer    var appServer = new TelnetServer();    appServer.Setup(2012);    // 開始監聽    appServer.Start();    while (Console.ReadKey().KeyChar != ‘q‘)    {        Console.WriteLine();        continue;    }    // 停止伺服器。    appServer.Stop();}// 第二種方法,通過配置啟動,需要注意的是,一定要注意配置好,不然啟動會失敗的,這裡沒有判斷初始化成功與否,可以看源碼裡面的例子。static void Main(string[] args){    var bootstrap = BootstrapFactory.CreateBootstrap();    bootstrap.Initialize();    bootstrap.Start();    while (Console.ReadKey().KeyChar != ‘q‘)    {        Console.WriteLine();        continue;    }    bootstrap.Stop();}

通過配置啟動,需要注意的是,一定要配置正確,不然無法正常啟動你的AppServer,其中serverType="AppServer的完整名稱, 類所在程式集",如:serverType="SuperSocket.QuickStart.TelnetServer_StartByConfig.TelnetServer, SuperSocket.QuickStart.TelnetServer_StartByConfig"。

到此,如何啟動SS以及如果簡單的實現你的AppServer和AppSession並啟動你的AppServer完成,在下一章節中,我們講解如果關聯Command。

優點

  實現你自己的AppSession和AppServer允許你根據你業務的需求來方便的擴充SuperSocket,你可以綁定session的串連和斷開事件,伺服器執行個體的啟動和停止事件。你還可以在AppServer的Setup方法中讀取你的自訂配置資訊。總而言之,這些功能讓你方便的建立一個你所需要的socket伺服器成為可能。

SuperSocket快速入門(三):實現你的AppServer和AppSession

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.