Delphi-IOCP API代码的封装和流程分析
经过一段时间的研究和学习,对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代码的封装和流程分析相关推荐
- uni-app H5兼容ios问题+微信扫一扫、微信支付等常用api代码封装
最近公司需要用uni开发一个项目,项目中遇到的问题记录一下,方便下次不采坑 场景: 使用wx自带sdk完成,扫一扫.微信登录.微信支付 引用方式: // index.html引入 &l ...
- RTSP播放器高RTSP兼容推流网页无插件流媒体播放器EasyPlayer-RTSP关于MP4的封装调用流程介绍
EasyPlayer-RTSP播放器是一套RTSP专用的播放器,包括有:Windows(支持IE插件,npapi插件).Android.iOS三个平台,是区别于市面上大部分的通用播放器,EasyPla ...
- Vivado中RTL封装IP流程
Vivado中RTL封装IP流程 前言 本文记录自己将RTL代码封装成IP的流程,以供之后查阅使用.最近一个月在做一个数据仲裁与转发的项目,已经完成功能仿真,准备将其封装成IP在Block Desig ...
- 【kafka】kafka RecordAccumulator封装消息流程
1.概述 转载:[生产者分析四]RecordAccumulator封装消息流程 并且做一定的修改 1.1 整体架构 1.1 RecordAccumulator封装消息流程初探 下面我们来分析下生产者核 ...
- Delphi 常用API 函数
Delphi 常用API 函数 AdjustWindowRect 给定一种窗口样式,计算获得目标客户区矩形所需的窗口大小 AnyPopup 判断屏幕上是否存在任何弹出式窗口 ArrangeIconic ...
- RabbitMQ Management HTTP API的简单封装
RabbitMQ Management HTTP API的简单封装 文章目录 RabbitMQ Management HTTP API的简单封装 官方相关 代码展示 官方相关 官方文档:https:/ ...
- 微博官方API使用方法【全流程教学】
微博官方API使用方法[全流程教学] 微博开发者身份认证 创建自己的应用 新应用的相关配置 基本信息 高级信息 微博认证流程OAuth2.0认证(核心步骤) Access Token授权有效期 接口调 ...
- android camera2 API流程分析
Android camera2 API流程分析 Android5.0之后,新推出来了一个类,android.hardware.camera2,与原来的camera的类实现照相和拍视频的流程有所不同,原 ...
- 零代码极限封装的【接口自动化测试框架】震碎你的三观
随着互联网寒冬的到来,测试行业裁员的裁员,找工作的找工作,内卷越来越加剧,那么选择一个学习提升的平台尤为重要,接下来我要说的事情将震碎你的三观,震掉你的眼球,和每个测试人息息相关,测试人都必看. 先自 ...
最新文章
- linux每天进步一点点-7月4.5.6日
- hbase coprocessor的分析
- class ts 扩展方法_一些让程序保持可扩展的 TypeScript 技巧
- html定义一个集合,HTML标签属性集合
- 这100道Linux常见面试题,看看你会多少?
- ES6学习笔记六(Iterator和for..of)
- python怎么模拟浏览器交互_干货分享:python爬虫模拟浏览器的两种方法实例分析(赶紧收藏)...
- 开发指南专题十七-JEECG图表配置说明
- SICP:Building Abstractions with Data
- Linux 添加计划任务
- spark学习-66-源代码:schedulerBackend和taskScheduler的创建(4)-yarn
- 一个资源管理系统的设计--基于cgroup机制
- Qt中QString、int、char、QByteArray、std::string【八大转换】
- CentOS6.5 webserver---网络配置
- outlook安装包下载
- 几个极速版自动阅读项目的autojs脚本
- 蔡学镛:架构师最重视的文档
- Linux环境下ARM开发工具TrueSTUDIO初体验
- c 语言构造函数的实验报告,c上机实验报告_相关文章专题_写写帮文库
- win2012 文件服务器 双机热备,Windows Server 2012 R2 DHCP服务器双机热备、负载均衡
热门文章
- Centos6.4下安装mysql5.6.10
- 使用拼凑URL的方法,实现DotNetNuke在新窗口中打开内容(三)
- 从MapX到MapXtreme2004[4]-标注AutoLabel
- 怎么用到自动化办公中_房型太小没有办公区怎么办?客厅中的1㎡就能搞定
- hmm 求隐藏序列_HMM——求隐藏序列,维特比算法求解
- 使用Elizabeth为您的应用程序生成随机数据
- 第三十四章 批量印刷书籍
- HTML5 Canvas操作图像像素
- es6 Promise.resolve()方法
- 人的手臂的自由度的数目以及六自由度机械臂的限制