C#高性能大容量SOCKET并发.pdf
文本预览下载声明
/sqldebug_fan/article/details
C#高性能大容量SOCKET 并发(零):代码结构说明
C#版完成端口具有以下特点:
连接在线管理(提供在线连接维护,连接会话管理,数据接收,连接断开等相关事件跟踪);
发送数据智能合并(组件会根据资源使用情况,对多个同时发送向同一连接的多个消息数据进行合并写入缓冲
区;
内存池管理(提供一系列的接收和发送buffer 可复用池);
数据读写封装;
通讯协议封装;
由不同的类负责实现,比MSDN 的例子代码多了不少逻辑,为了方便大家阅读和理解,把整体类框架设计整体如下。
类结构图
类说明
1. AsyncSocketServer:服务入口,建立Socket 监听,负责接收连接,绑定连接对象,处理异步事件返回的
接收和发送事 件;m_asyncSocketUserTokenPool 是管理所有空闲的AsyncSocketUserToken,采用栈的管
理方式,后进先 出;m_asyncSocketUserTokenList 是管理所有正在执行的AsyncSocketUserToken,是一
个列 表;m_logOutputSocketProtocolMgr 是LogOutputSocketProtocol 的管理对 象;
m_uploadSocketProtocolMgr 是UploadSocketProtocol 的管理对象,用于检测是否同时上传同一个文 件;
m_downloadSocketProtocolMgr 是DownloadSocketProtocol 的管理对象;m_daemonThread 是守护进程,用
于关闭超时连接。
2. AsyncSocketUserToken:用于SocketAsyncEventArgs 绑定,保存 每个Socket 服务对象,包括:
m_receiveEventArgs 接收数据异步事件;m_asyncReceiveBuffer 接收数据异步事件使 用的缓存;
m_sendEventArgs 发送数据异步事件;m_receiveBuffer 接收异步事件返回的数据存放缓存,用于后续的分
包;m_sendBuffer 用于保存发送的数据缓存;m_asyncSocketInvokeElement 是用于协议调用的基类,主要
实现分包,并发 发送的包加到发送列表中,发送完成回调时继续发送下一个包;m_connectSocket 是连接
的Socket 对象。
3. AsyncSocketInvokeElement: 用于协议调用的基类,主要实现分包,并发发送的包加到发送列表中,发送
完成回调时继续发送下一个包,包括:m_incomingDataParser 用于 分析接收到的数据包,把协议解析出命
令、关键字、数据,并存储到列表中;m_outgoingDataAssembler 用于组装需要发送的数据,把命 令、关
键字、数据组成符合协议格式的数据,并存储在列表中。
4. BaseSocketProtocol 是所有协议的基类,把一些公共的方法 放在这里,后续的ControlSocketProtocol、
DownloadSocketProtocol LogOutputSocketProtocol RemoteStreamSocketProtocol
、 、 、
ThroughputSocketProtocol、UploadSocketProtocol 都从这里继承。
/sqldebug_fan/article/details
C#高性能大容量SOCKET 并发(一):IOCP 完成端口例子介绍
例子主要包括SocketAsyncEventArgs 通讯封装、服务端实现日志查看、SCOKET 列表、上传、下载、远程文件流、
吞吐量协议,用 于测试SocketAsyncEventArgs 的性能和压力,最大连接数支持65535 个长连接,最高命令交互速
250MB/S 1Gb=125MB/S 。 C#
度达到 (使用的是 的方式,相当于千兆网卡
显示全部