- 1、本文档共42页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
DELPHI 高性能大容量 SOCKET 并发
(一):IOCP 完成端口例子介绍
例子主要包括 IOCP 控件封装、服务端实现、传输协议和日志、控制、 SQL 查询、上传、下载等协议实
现,并包括一些初步的性能测试结果。
服务端:
界面截图如下:
提供服务和桌面方式运行,桌面方式可直接打开程序,方便日常调试,可以使用命令行注册或卸载服务,
在 CMD 中输入 D:\DEMO\IOCPDemo\Bin\IOCPDemoSvr.exe -install 来注册服务,在 CMD 输入
D:\DEMO\IOCPDemo\Bin\IOCPDemoSvr.exe -uninstall 来卸载服务。
客户端:
界面截图如下:
主要实现了服务端日志查看,服务端协议类表查看, SQL 语句执行协议,上传、下载协议实现,其中对
上传、下载实现了一个多线程同时传,用于测试服务器并发性能。
性能:
支持超过 2000 个链接及以上同时上传文件,不过每个连接上传速度只有 1 到 2K 。支持超过 2W 个连接
同时在线传输命令。
单实例上传下载测试结果:
1
从测试结果可以看出随着发送包增大,速度变快。这里存在一个风险,就是 SOCKET 传输失败的次数也
会增加。
2
(二):IOCP 完成端口控件封装
IOCP 完成端口介绍:
完成端口模型是 Windows 平台下 SOCKET 端口模型最为复杂的一种 I/O 模型。如果一个应用程序需要同
时管理为数众多的套接字,而且希望随着系统内安装的 CPU 数量的增多,应用程序的性能也可以线性提升,
采用完成端口模型,往往可以达到最佳的系统性能。
完成端口可以管理成千上万的连接, 长连接传文件可以支持 5000 个以上,长连接命令交互可以支持 20000
个以上。这么大并发的连接,更需要考虑的是应用场景, 按照 100M 的网卡传输速度 12.5MB/S ,如果是 5000
个传文件连接,则每个连接能分到的速度 2.56KB/S ;如果是 20000 个命令交互连接,则每个连接分到的吞吐
量是 655B/S ,这种速度的吞吐量对很多应用是不满足,这时就要考虑加大网卡的传输速度或实现水平扩展,
这个我们后续会介绍。
完成端口是由系统内核管理多个线程之间的切换,比外部实现线程池性能要高, CPU 利用率上内核和用
户态可以达到 1:1 ,很多应用线程池是无法达到的。因此同等连接数的情况下,完成端口要比 INDY 的
TCPServer 传输速度要快,吞吐量更高。
要使用完成端口, 主要是以下三个函数的使用: CreateIoCompletionPort 、GetQueuedCompletionStatus 、
PostQueuedCompletionStatus 。
CreateIoCompletionPort 的功能是: 1、创建一个完成端口对象; 2 、将一个句柄和完成端口关联在一起;
GetQueuedCompletionStatus 是获取完成端口状态,是阻塞式调用,在指定时间内如果没有事件通知,会一
直等待; PostQueuedCompletionStatus 用于向完成端口投递一个完成事件通知。
function CreateIoCompletionPort(FileHandle, ExistingCompletionPort: THandle; CompletionKey,
NumberOfConcurrentThreads: DWORD): THandle; stdcal
文档评论(0)