创建TcpService
定义
命名空间:TouchSocket.Sockets
程序集:TouchSocket.dll
一、说明
TcpService是Tcp系服务器基类,它不参与实际的数据交互,只是配置、激活、管理、注销、重建SessionClient类实例。而SessionClient是当**TcpClient(客户端)**成功连接服务器以后,由服务器新建的一个实例类,后续的所有通信,也都是通过该实例完成的。
二、特点
- 简单易用。
- IOCP多线程。
- 内存池支持
- 高性能(实测服务器单客户端单线程,每秒可接收200w条8字节的信息,接收数据流量可达3GB/s)。
- 多地址监听(可以一次性监听多个IP及端口)
- 适配器预处理,一键式解决分包、粘包、对象解析(如HTTP,Json)等。
- 超简单的同步发送、异步发送、接收等操作。
- 基于委托、插件驱动,让每一步都能执行AOP。
2.1 吞吐量性能测试
如下图所示,使用最简单数据接收,不做任何处理。数据吞吐量可达3Gb。 测试Demo示例

2.2 连接性能测试
如下图所示,使用最简单连接测试,不做任何处理。建立1000本地连接仅需0.1秒。 测试Demo示例

三、产品应用场景
- 所有Tcp基础使用场景:可跨平台、跨语言使用。
- 自定义协议解析场景:可解析任意数据格式的TCP数据报文。
四、服务器架构
4.1 连接架构
服务器在收到新客户端连接时,会创建一个SessionClient的派生类实例,与客户端TcpClient一一对应,后续的数据通信均由此实例负责。
SessionClient在Service里面以字典映射。ID为键,SessionClient本身为值。
4.2 Scoped 生命周期
TcpService
在支持Scoped的IOC
容器中工作时,也是支持Scoped
区域划分的。
一般情况下,TcpService
在Setup
时,首先会创建一个Scoped
区域,用于整个TcpService
的生命周期。在TcpService
释放(Dispose
)时释放。
然后,当有新客户端连接后,会为每个SessionClient
的派生类实例也创建一个Scoped
区域,用于SessionClient
的生命周期。当连接断开时,会释放此区域。