创建TcpService
一、说明
TcpService是Tcp系服务器基类,它不参与实际的数据交互,只是配置、激活、管理、注销、重建SocketClient类实例。而SocketClient是当**TcpClient(客户端)**成功连接服务器以后,由服务器新建的一个实例类,后续的所有通信,也都是通过该实例完成的。
二、特点
- 简单易用。
- IOCP多线程。
- 内存池支持
- 高性能(实测服务器单客户端单线程,每秒可接收200w条8字节的信息,接收数据流量可达2.5GB/s)。
- 多地址监听(可以一次性监听多个IP及端口)
- 适配器预处理,一键式解决分包、粘包、对象解析(如HTTP,Json)等。
- 超简单的同步发送、异步发送、接收等操作。
- 基于委托、插件驱动,让每一步都能执行AOP。
三、产品应用场景
- 所有Tcp基础使用场景:可跨平台、跨语言使用。
- 自定义协议解析场景:可解析任意数据格式的TCP数据报文。
四、服务器架构
服务器在收到新客户端连接时,会创建一个SocketClient的派生类实例,与客户端TcpClient一一对应,后续的数据通信均由此实例负责。
SocketClient在Service里面以字典映射。ID为键,SocketClient本身为值。
五、可配置项
可配置项
SetBufferLength
发送、接收缓存容量(单位:byte),默认1024×64。设置建议:
- 如果数据包较小,建议10k左右的值。更加节约内存。
- 如果数据包较大,例如文件传输等,建议64k,甚至更大的值。
- 该值虽然无上限,但是一般不 要超过1Mb,不然不仅没意义,还很浪费
SetMaxPackageSize
数据包最大值(单位:byte),默认1024×1024×10。该值会在适当时间,直接作用DataHandlingAdapter.MaxPackageSize。
SetThreadCount
多线程数量。该值在Auto模式下指示线程池的最少线程数量和IO线程数量。
设置建议:
- 异步处理接收数据,此时线程数量设置为内核线程左右的值即可。
- 同步处理接收数据,此时应当考虑两个因素。该操作是否为耗时操作,如果是,则该值在允许范围内,应当设置更可能大的值。如果不是,则设置为内核线程左右的值即可。
SetGetDefaultNewID
配置初始ID的分配策略
SetListenIPHosts
监听IP和端口号组,可以一次性设置多个地址。
SetServerName
服务器标识名称,无实际使用意义。
SetBacklogProperty
Tcp半连接挂起连接队列的最大长度。默认为30
SetMaxCount
最大可连接数,默认为10000
SetReceiveType
接收类型。
- AUTO:自动接收模式。
- None:不投递IO接收申请,用户可通过GetStream,获取到流以后,自己处理接收。注意:连接端不会感知主动断开。
UsePlugin
是否启用插件。在启用时或许会带来一点点性能损耗,基本上不是千万数据交互根本不值一提。
SetServiceSslOption
Ssl配置,为Null时则不启用。
UseNoDelay
设置Socket的NoDelay属性,默认false。