经过一段时间的研究和学习,对IOCP的原理和流程都有了一定的了解,测试的Demo结果显示在局域网内轻轻松松处理5000个左右的连接,还是比较稳定的。运行Echo测试几个小时后。服务端内存稳定在60M左右。

这两天对原始代码进行了封装,封装成了一套IOCP类。

原始的API调用,对于研究和学习IOCP的原理还是比较好的。封装后,如果没有较好的文档,可能比较难理解。

1.发送数据流程图

2.服务回写数据流程

2.IOCP对象中心

2.1 TIOCPObject
IOCP对象中心,创建IOCP句柄,开启侦听端口。
提供处理数据,接收套接字,投递接收请求,投递发送请求。

2.2 TIOCPClientContext
套接字扩展类
负责接收数据,
可以继承他的dataRecvied进行数据处理
可以调用他进行回写数据到客户端

2.3 TIOCPClientContextFactory
负责创建和释放套接字扩展对象<在接收客户端连接时进行使用>
负责注册编码器和解码器
负责注册套接字扩展对象类<继承TIOCPClientContext的类>

2.4 TIOCPDecoder
接收到客户端的数据后调用的解码器,将接收到的数据流,解码成对象。
可以在这里处理粘包工作。
需要向TIOCPClientContextFactory进行注册解码器

2.5 TIOCPEncoder
调用TIOCPClientcontext进行回写对象到客户端时,将回写的对象进行编码成数据流。然后交由TIOCPObject进行数据发送的投递。
需要向TIOCPClientContextFactory进行注册编码器

转载于:https://www.cnblogs.com/DKSoft/archive/2013/04/27/3047366.html

Delphi-IOCP API代码的封装和流程分析相关推荐

  1. uni-app H5兼容ios问题+微信扫一扫、微信支付等常用api代码封装

    最近公司需要用uni开发一个项目,项目中遇到的问题记录一下,方便下次不采坑 场景:         使用wx自带sdk完成,扫一扫.微信登录.微信支付 引用方式: // index.html引入 &l ...

  2. RTSP播放器高RTSP兼容推流网页无插件流媒体播放器EasyPlayer-RTSP关于MP4的封装调用流程介绍

    EasyPlayer-RTSP播放器是一套RTSP专用的播放器,包括有:Windows(支持IE插件,npapi插件).Android.iOS三个平台,是区别于市面上大部分的通用播放器,EasyPla ...

  3. Vivado中RTL封装IP流程

    Vivado中RTL封装IP流程 前言 本文记录自己将RTL代码封装成IP的流程,以供之后查阅使用.最近一个月在做一个数据仲裁与转发的项目,已经完成功能仿真,准备将其封装成IP在Block Desig ...

  4. 【kafka】kafka RecordAccumulator封装消息流程

    1.概述 转载:[生产者分析四]RecordAccumulator封装消息流程 并且做一定的修改 1.1 整体架构 1.1 RecordAccumulator封装消息流程初探 下面我们来分析下生产者核 ...

  5. Delphi 常用API 函数

    Delphi 常用API 函数 AdjustWindowRect 给定一种窗口样式,计算获得目标客户区矩形所需的窗口大小 AnyPopup 判断屏幕上是否存在任何弹出式窗口 ArrangeIconic ...

  6. RabbitMQ Management HTTP API的简单封装

    RabbitMQ Management HTTP API的简单封装 文章目录 RabbitMQ Management HTTP API的简单封装 官方相关 代码展示 官方相关 官方文档:https:/ ...

  7. 微博官方API使用方法【全流程教学】

    微博官方API使用方法[全流程教学] 微博开发者身份认证 创建自己的应用 新应用的相关配置 基本信息 高级信息 微博认证流程OAuth2.0认证(核心步骤) Access Token授权有效期 接口调 ...

  8. android camera2 API流程分析

    Android camera2 API流程分析 Android5.0之后,新推出来了一个类,android.hardware.camera2,与原来的camera的类实现照相和拍视频的流程有所不同,原 ...

  9. 零代码极限封装的【接口自动化测试框架】震碎你的三观

    随着互联网寒冬的到来,测试行业裁员的裁员,找工作的找工作,内卷越来越加剧,那么选择一个学习提升的平台尤为重要,接下来我要说的事情将震碎你的三观,震掉你的眼球,和每个测试人息息相关,测试人都必看. 先自 ...

最新文章

  1. linux每天进步一点点-7月4.5.6日
  2. hbase coprocessor的分析
  3. class ts 扩展方法_一些让程序保持可扩展的 TypeScript 技巧
  4. html定义一个集合,HTML标签属性集合
  5. 这100道Linux常见面试题,看看你会多少?
  6. ES6学习笔记六(Iterator和for..of)
  7. python怎么模拟浏览器交互_干货分享:python爬虫模拟浏览器的两种方法实例分析(赶紧收藏)...
  8. 开发指南专题十七-JEECG图表配置说明
  9. SICP:Building Abstractions with Data
  10. Linux 添加计划任务
  11. spark学习-66-源代码:schedulerBackend和taskScheduler的创建(4)-yarn
  12. 一个资源管理系统的设计--基于cgroup机制
  13. Qt中QString、int、char、QByteArray、std::string【八大转换】
  14. CentOS6.5 webserver---网络配置
  15. outlook安装包下载
  16. 几个极速版自动阅读项目的autojs脚本
  17. 蔡学镛:架构师最重视的文档
  18. Linux环境下ARM开发工具TrueSTUDIO初体验
  19. c 语言构造函数的实验报告,c上机实验报告_相关文章专题_写写帮文库
  20. win2012 文件服务器 双机热备,Windows Server 2012 R2 DHCP服务器双机热备、负载均衡

热门文章

  1. Centos6.4下安装mysql5.6.10
  2. 使用拼凑URL的方法,实现DotNetNuke在新窗口中打开内容(三)
  3. 从MapX到MapXtreme2004[4]-标注AutoLabel
  4. 怎么用到自动化办公中_房型太小没有办公区怎么办?客厅中的1㎡就能搞定
  5. hmm 求隐藏序列_HMM——求隐藏序列,维特比算法求解
  6. 使用Elizabeth为您的应用程序生成随机数据
  7. 第三十四章 批量印刷书籍
  8. HTML5 Canvas操作图像像素
  9. es6 Promise.resolve()方法
  10. 人的手臂的自由度的数目以及六自由度机械臂的限制