SuperSocket
SuperSocket 是一个轻量级的可扩展的 Socket 开发框架,可用来构建一个服务器端 Socket 程序,而无需了解如何使用 Socket,如何维护Socket连接,Socket是如何工作的。该项目使用纯 C# 开发,易于扩展和集成到已有的项目。只要你的已有系统是使用.NET开发的,你都能够使用 SuperSocket来轻易的开发出你需要的Socket应用程序来集成到你的现有系统之中。
特点:
高性能的事件驱动通信;
简单易用,只需要几个类就能创建出健壮的Socket服务器端程序;
性能优良, 稳定可靠;
支持各种协议, 内置的协议解析工具让你把实现通信协议这种复杂的工作变得很简单;
自动支持SSL/TLS传输层加密;
强大,灵活而且可扩展的配置让你开发Socket服务器省时省力;
支持多个socket服务器实例运行, 而且支持多个服务器实例的隔离;
SuperSocket能以控制台或者Windows服务形式运行。一个脚本就能将SuperSocket安装成服务;
灵活的日志策略能够记录大部分socket活动;
支持UDP;
支持IPv6;
支持Windows Azure;
支持Linux/Unix操作系统(通过Mono 2.10或以上版本);
内置可直接使用的Flash/Silverlight Socket策略服务器
TCP粘包和拆包
TCP是个“流协议”,所谓流,就是没有界限的一连串数据,没有界限。TCP底层不了解业务数据的含义,它会根据TCP缓冲区的实际情况进行包的划分,所以业务上认为,一个完整的包可能被TCP拆分为多个包进行发送,也可能把多个小包封装成一个大的数据包进行发送,这就是所谓的TCP粘包和拆包问题。
由于底层无法理解上层的业务数据,所以底层是无法保证数据不被拆分和重组的。只能通过设计上层的协议栈来解决,业界的方案可归纳如下:
消息定长,例如每个报文固定200字节,如果不够,空位补空格;
在包尾增加回车换行符进行分割,如FTP协议;
将消息分为消息头和消息体,消息头中包含消息的长度、字段等信息;
更复杂的应用层协议。
在Visual Studio中,新建C#控制台应用程序;
使用Nuget管理器安装SuperSocket.Engine;
新建一个SocketSession类,继承自AppSession,重写基类的方法;
新建一个SocketServer类,继承自AppServer,重写基类的方法;
添加命令类Apply,继承自CommandBase;
在配置文件中进行相应配置;
在Program.cs文件中添加服务器启动和停止代码;
启动程序,使用SocketTool工具进行测试。
AppSession 代表一个和客户端的逻辑连接,基于连接的操作应该定于在该类之中。你可以用该类的实例发送数据到客户端,接收客户端发送的数据或者关闭连接。
AppServer 代表了监听客户端连接,承载TCP连接的服务器实例。理想情况下,我们可以通过AppServer实例获取任何你想要的客户端连接,服务器级别的操作和逻辑应该定义在此类之中。
参考资料
官方地址:https://docs.supersocket.net/
源代码地址:https://github.com/kerryjiang/SuperSocket
分享会PPT参见:https://pan.baidu.com/s/1J0PO7kr54MIgKhYXMBMU0A,
提取密码:zqhx。
END