前言碎语
最近一直在做旧版本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.Text.Encoding.UTF8.GetString(arg.Buffer, arg.Offset, arg.BytesTransferred);
Console.WriteLine(received);
ass.Send(received);
});
}
这里面的SetReceiveHandler是为处理接收数据而实现的回调函数.
要使用好此框架, 主要遵循以下原则:
- AsyncSocketSession 为异步Socket连接处理的对象, 可方便的发送/接收
- 代码中可以对AsyncSocketSession 对象进行相应的管理
- 注意资源的回收
- 给川酷点个赞
如果您觉得这篇文章对您有那么一丁点益处, 或者从某个角度触动到了您, 请给川酷一些鼓励, 打赏, 点赞, 关注, 哪怕评论区骂我两句, 鄙人都感激涕零.