国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

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

2019-11-14 15:54:24
字體:
來源:轉載
供稿:網(wǎng)友

什么是Appsession?

  AppSession 代表一個和客戶端的邏輯連接,基于連接的操作應該定義于在該類之中。你可以用該類的實例發(fā)送數(shù)據(jù)到客戶端,接收客戶端發(fā)送的數(shù)據(jù)或者關閉連接。同時可以保存客戶端所關聯(lián)的數(shù)據(jù)。

什么是AppServer?

  AppServer 代表了監(jiān)聽客戶端連接,承載TCP連接的服務器實例。理想情況下,我們可以通過AppServer實例獲取任何你想要的客戶端連接,服務器級別的操作和邏輯應該定義在此類之中。

第一步:創(chuàng)建你的AppSession

  為什么要創(chuàng)建AppSession呢,本人認為,快速入門系統(tǒng),以下三點足夠你用的了。

  1. 需要重新實現(xiàn)會話創(chuàng)建、收到未知的協(xié)議數(shù)據(jù)的時候、處理異常等可重載的方法,像異常,只是做了記錄日志操作,部分方法都是不處理。
  2. 需要關聯(lián)一些數(shù)據(jù),同時AppSession提供了可存放最多10個數(shù)據(jù)的Items的屬性(IDictionary<object, object>類型)。
  3. 需要其他對象來實現(xiàn)自定義協(xié)議。
 1 // 在下面的代碼中,當一個新的連接連接上時,服務器端立即向客戶端發(fā)送歡迎信息。 這段代碼還重寫了其它AppSession的方法用以實現(xiàn)自己的業(yè)務邏輯。 2 public class TelnetSession : AppSession<TelnetSession> 3 { 4     // 重載OnSessionStarted函數(shù),贊同于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 // 你可以根據(jù)你的業(yè)務需求來給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都是使用的命令行協(xié)議。由于泛型約束,在自定義AppSession的時候,泛型TAppSession一定要指定所定義的類,很多朋友像命令無法加載啦、服務器啟動不起來等等,都是因為這里定義錯誤造成的。

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

第二步:創(chuàng)建你的AppServer類型

如果你創(chuàng)建自己的AppSession并希望使用它,那么必須要創(chuàng)建所對應的AppServer。

 1 // 現(xiàn)在 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 }

第三步:啟動你的服務器

還記錄上一節(jié)我們講的內容,如何啟動你的SS么?

// 第一種方法,代碼啟動。static void Main(string[] args){    // 注意是TelnetServer    var appServer = new TelnetServer();    appServer.Setup(2012);    // 開始監(jiān)聽    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以及如果簡單的實現(xiàn)你的AppServer和AppSession并啟動你的AppServer完成,在下一章節(jié)中,我們講解如果關聯(lián)Command。

優(yōu)點

  實現(xiàn)你自己的AppSession和AppServer允許你根據(jù)你業(yè)務的需求來方便的擴展SuperSocket,你可以綁定session的連接和斷開事件,服務器實例的啟動和停止事件。你還可以在AppServer的Setup方法中讀取你的自定義配置信息。總而言之,這些功能讓你方便的創(chuàng)建一個你所需要的socket服務器成為可能。

參考文獻:http://docs.supersocket.net/v1-6/zh-CN/Implement-your-AppServer-and-AppSession


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 大同市| 聊城市| 股票| 鄱阳县| 岚皋县| 竹山县| 武义县| 城口县| 饶平县| 呼玛县| 确山县| 绍兴市| 克拉玛依市| 和平县| 砚山县| 长宁区| 洛扎县| 达拉特旗| 云安县| 郁南县| 新沂市| 错那县| 勃利县| 永济市| 玛纳斯县| 凉山| 安溪县| 晋城| 珠海市| 松溪县| 桃江县| 横山县| 玉树县| 磐石市| 昭平县| 华容县| 克山县| 阿拉善左旗| 海伦市| 遵义县| 藁城市|