[SSCore] 开源dotnet core 版本 SuperSocket
前言碎語
最近一直在做舊版本dotnet 程序遷移至dotnet core的工作, 非常欣慰dotnet社區的蓬勃發展, 目前大部分的第三方類庫或開源代碼都有了dotnet core版本 或者可以方便的找到替代方案. 這其中我唯一覺得遺憾的是dotnet 社區大名鼎鼎的socket 通訊框架SuperSocket
SuperSocket是啥?
引用SuperSocket官方介紹:
SuperSocket是一個輕量級, 跨平臺而且可擴展的 .Net/Mono Socket 服務器程序框架。你無須了解如何使用 Socket, 如何維護 Socket 連接和 Socket 如何工作,但是你卻可以使用 SuperSocket 很容易的開發出一款 Socket 服務器端軟件,例如游戲服務器,GPS 服務器, 工業控制服務和數據采集服務器等等。
從技術的角度來看, SuperSocket是基于.NET IOCP的AsyncSocketEventArgs進行開發設計的Socket通訊框架. 既然是IOCP則必然是異步處理, 這樣對編程人員的門檻則比較高. SuperSocket封裝了對Socket連接的維護, 發送接收的程序邏輯. 這樣對于一般的程序開發人員大大降低了編碼門檻, 提高了開發效率.
動手來開源
一直受益于開源社區的各位大神, 也覺得自己該做些什么. 突然發現這是個機會, 便把SuperSocket代碼轉換為dotnet core 版本. 項目地址在這里SSCore. 目前還并沒有完全把SuperSocket的全部邏輯轉過來. 考慮到自己的一些需求, SuperSocket的命令模式并不適用.
所以主要是將Socket通信部分的代碼拿過來, 根據自己對這個開源庫所要面向場景的理解, 做了一些調整.
使用方法很簡單, 首先獲得一個SocketServer的實例,
? ?SocketServerBase server = new SocketServerBase(); ? ?? ?server.NewClientAccepted += Server_NewClientAccepted; ?
? ?server.Start();
然后定義一個客戶端連接的委托實現, 主要是獲取到當前Session實例
private static void Server_NewClientAccepted(Socket client,? ? ? ? ?ISocketSession session) {Console.WriteLine("----- new client ------------");AsyncSocketSession ass = session as AsyncSocketSession;ass.SetReceiveHandler(arg =>{Console.WriteLine("----- new receive ------------");string received = System.Encoding.UTF8.GetString(arg.Buffer,
arg.Offset, arg.BytesTransferred); ? ? ?
? ? ? ? ? ?Console.WriteLine(received);ass.Send(received);});}
這里面的SetReceiveHandler是為處理接收數據而實現的回調函數.
要使用好此框架, 主要遵循以下原則:
AsyncSocketSession 為異步Socket連接處理的對象, 可方便的發送/接收
代碼中可以對AsyncSocketSession 對象進行相應的管理
注意資源的回收
相關文章:
SuperSocket, 可擴展的 Socket 服務器框架
SuperSocket源碼解析之開篇
SuperSocket與Netty之實現protobuf協議,包括服務端和客戶端
原文地址:http://www.jianshu.com/p/72b13fc4ae34
.NET社區新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關注
總結
以上是生活随笔為你收集整理的[SSCore] 开源dotnet core 版本 SuperSocket的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C# winform程序免安装.net
- 下一篇: .net core依赖注入的封装