原文: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都从这里继承。

DEMO下载地址:http://download.csdn.net/detail/sqldebug_fan/7467745

免责声明:此代码只是为了演示C#完成端口编程,仅用于学习和研究,切勿用于商业用途。水平有限,C#也属于初学,错误在所难免,欢迎指正和指导。邮箱地址:fansheng_hx@163.com。

C#高性能大容量SOCKET并发(零):代码结构说明的更多相关文章

  1. C#高性能大容量SOCKET并发(转)

    C#高性能大容量SOCKET并发(零):代码结构说明 C#高性能大容量SOCKET并发(一):IOCP完成端口例子介绍 C#高性能大容量SOCKET并发(二):SocketAsyncEventArgs ...

  2. C#高性能大容量SOCKET并发(四):缓存设计

    原文:C#高性能大容量SOCKET并发(四):缓存设计 在编写服务端大并发的应用程序,需要非常注意缓存设计,缓存的设计是一个折衷的结果,需要通过并发测试反复验证.有很多服务程序是在启动时申请足够的内存 ...

  3. C#高性能大容量SOCKET并发(十一):编写上传客户端

    原文:C#高性能大容量SOCKET并发(十一):编写上传客户端 客户端封装整体框架 客户端编程基于阻塞同步模式,只有数据正常发送或接收才返回,如果发生错误则抛出异常,基于TcpClient进行封装,主 ...

  4. C#高性能大容量SOCKET并发(十):SocketAsyncEventArgs线程模型

    原文:C#高性能大容量SOCKET并发(十):SocketAsyncEventArgs线程模型 线程模型 SocketAsyncEventArgs编程模式不支持设置同时工作线程个数,使用的NET的IO ...

  5. C#高性能大容量SOCKET并发(九):断点续传

    原文:C#高性能大容量SOCKET并发(九):断点续传 上传断点续传 断点续传主要是用在上传或下载文件,一般做法是开始上传的时候,服务器返回上次已经上传的大小,如果上传完成,则返回-1:下载开始的时候 ...

  6. C#高性能大容量SOCKET并发(七):协议字符集

    原文:C#高性能大容量SOCKET并发(七):协议字符集 UTF-8 UTF-8是UNICODE的一种变长字符编码又称万国码,由Ken Thompson于1992年创建.现在已经标准化为RFC 362 ...

  7. C#高性能大容量SOCKET并发(六):超时Socket断开(守护线程)和心跳包

    原文:C#高性能大容量SOCKET并发(六):超时Socket断开(守护线程)和心跳包 守护线程 在服务端版Socket编程需要处理长时间没有发送数据的Socket,需要在超时多长时间后断开连接,我们 ...

  8. C#高性能大容量SOCKET并发(五):粘包、分包、解包

    原文:C#高性能大容量SOCKET并发(五):粘包.分包.解包 粘包 使用TCP长连接就会引入粘包的问题,粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一 ...

  9. C#高性能大容量SOCKET并发(三):接收、发送

    原文:C#高性能大容量SOCKET并发(三):接收.发送 异步数据接收有可能收到的数据不是一个完整包,或者接收到的数据超过一个包的大小,因此我们需要把接收的数据进行缓存.异步发送我们也需要把每个发送的 ...

随机推荐

  1. 【codeforces 791B】Bear and Friendship Condition

    [题目链接]:http://codeforces.com/contest/791/problem/B [题意] 给你m对朋友关系; 如果x-y是朋友,y-z是朋友 要求x-z也是朋友. 问你所给的图是 ...

  2. react里执行shouldComponentUpdate时返回false的后果

    大家都知道生命周期shouldComponentUpdate返回false时,不会进行后续的渲染,那这个时候state是什么情况呢.我们看一下demo class Toggle extends Rea ...

  3. 一个git pull无法使用的问题

    之前通过git管理的一个项目,今天直接用eclipse通过ssh加入工程后,每次通过git命令行pull代码都报以下错误: Unable to negotiate with 21.12.1.167 p ...

  4. AndroidStudio使用properties资源文件

    在Android项目开发中,为了一些公用资源使用方便,可以在assets资源文件夹中将需要用到的资源写成.properties或者.json的文件形式,并进行读取使用.在做html5+javascri ...

  5. 构建工具Gradle

    1.Summary   从Android团队开始宣布放弃Eclipse转投Android Studio时,构建工具Gradle进入了Android开发者的视野.而随着热修复.插件化.编译时注解的流行, ...

  6. EasyUI入门:怎样引入及简单使用

    或许,仅仅有当做比較大的项目的时候,才会发现封装好的东西会为程序员们带来多少方便.合作开发的时候更应该强调复用,才干更加发挥团队的优势. 今天使用了一些EasyUI,发现非常wonderful! 比方 ...

  7. elasticsearch start

    启动.停止服务 默认官方版启动: linux:./bin/elasticsearch start window:直接运行bin/elasticsearch.bat 默认官方版停止: linux:kil ...

  8. php自动加载类文件探讨,spl_autoload_register自动加载原理

    spl_autoload_register函数是实现自动加载未定义类功能的的重要方法,所谓的自动加载意思就是 我们的new 一个类的时候必须先include或者require的类文件,如果没有incl ...

  9. Massively parallel supercomputer

    A novel massively parallel supercomputer of hundreds of teraOPS-scale includes node architectures ba ...

  10. java 中的两个常用命令

    这两个命令,分别为,javac 和java 实际操作如下图: