完成端口深入理解

深入理解Windows完成端口的客户端应用 htmltable {th, td {th {pre {简介:完成端口是Windows系统中用于优化网络编程异步I/O操作的高级模型。本文以实例探讨如何使用完成端口来提高客户端应用程序在网络数据处理上的效率,并支持多线程和多并发连接。我们将分析关键文件和实现步骤,展示如何通过完成端口聚合I/O请求、使用线程池处理I/O操作,以及如何处理连接、数据发送接收和完成端口通知,从而达到高效处理并发连接的目的。 阅读详情
 
作为WIN平台下同时管理数千个连接的最为高效的网络模型,完成端口已经被越来越多的人认识和熟悉。通常情况下,一种经典的完成端口使用模式是:
  (1)创建完成端口,并在指定端口开始监听;
  (2)创建接受连接线程,用accept或acceptEx接受客户端连接;
  (3)创建工作者线程,处理客户端的数据收发。
  
  众所周知,CreateIoCompletionPort函数,有两个作用,一是“创建”一个完成端口,二是将一个socket与已经创建的完成端口句柄相“绑定”,绑定之后,基于该socket的收、发、断开等事件都可以被完成端口感知。一般情况下,较为正常的思维状态下,CreateIoCompletionPort的绑定是选在accept函数执行以后或acceptEx函数完成之时与套接字相绑定。但是,这并不说明CreateIoCompletionPort函数就不能进行其它形式的绑定。

  事实上,CreateIoCompletionPort关心的只是一个套接字,它并不关心这个套接字到底是通过accept而来的,还是用来connect的。也就是说,它并不关心当前的这个socket是用于接受客户端连接的,还是用来连接其它服务器的。那就是说,CreateIoCompletionPort函数,也可以用来绑定一个连接到其它服务器的客户端socket。

  这个问题的提出,是我在设计网关服务器时。

  网关服务器,承担的主要工作就是两个:向内,负责客户端数据包的分发;向外,负责把内部服务器所有的返回数据包统一通过网关发送出去。网关服务器上,我创建了两个IOCP,一个用来向外接受玩家与网关的数据交换,另一个用来与内部的服务器进行数据转发。由于本人较懒,所以想在内部的那个服务器上,也采用IOCP模型来作。

  在网关上负责向内部服务器提供数据转发的这个IOCP,必须要能正确识别哪一个内部服务器使用的是哪一个套接字。这样,内部服务器与网关服务器之间的套接字确认就有两种方式。一种方式,是由内部服务器连接到网关服务器上,随后向网关服务器发送一个注册包,告诉网关服务器当前的这个socket是哪个内部服务器;另一种方式,是由网关服务器先创建若干个指定的socket,然后用这些socket去连接指定类型的内部服务器。前面,我已经说过,IOCP可以绑定的套接字,不仅是可以被accept来的套接字,也可以是connect其它服务器的套接字。所以,我选用了后一种方式。这样在网关服务器对内的IOCP的逻辑处理上,就少了一项判定和一个包的逻辑解析。当网关流量非常巨大时,每节省一项判定或一种分支,效率和资源都会得到更有效的利用,高性能从哪里来?就是从这样的一点一滴的改进中来。到目前为止,我能测试到的网关服务器流量上限是每秒10M到12M,据说,局域网的某些HUB给每台机子的带宽只分了10M左右的出口带宽,所以,我无法确定如果把局域网的交换机换成电信级的,数据交换量会不会有一个更大的提高,不久,公司会进一个这样的电信级交换机,到时可以作进一步的测试。

  过段时间,我会在我的BLOG( http://blog.youkuaiyun.com/sodme)上公布我的IOCP底层通信模型的架构设计以及一个通用的高性能服务器模型架构,希望能与各位同仁共同研究高性能服务器研发问题。
 
深入理解IOCP完成端口与重叠模型 在现代网络应用中,I/O 操作的性能直接影响到整个系统的响应速度和扩展能力。在这样的背景下,IOCP(I/O 完成端口)作为 Windows 平台上一种高效的异步输入输出机制,扮演着至关重要的角色。IOCP 允许一个或多个线程高效地等待多个I/O事件完成,这一点在处理大量并发连接时尤其显著。本章旨在提供 IOCP 的基础概念和机制介绍,为深入分析和应用 IOCP 在后续章节中铺垫。在讨论Windows操作系统中的重叠I/O模型之前,首先需要理解何谓I/O操作。 阅读详情

相关推荐

深入理解Windows完成端口:PiggyXP项目源码解析

I/O完成数据结构通常包含以下几个字段:// 完成键值// 实际传输的字节数// 指向OVERLAPPED结构的指针Key:与I/O请求关联的完成键值,这个值在请求提交时指定。:I/O操作实际传输的数据量。Overlapped:指向发起I/O请求时使用的OVERLAPPED结构体。

weixin_29050829的博客 1020

完成端口的深入理解及一种变态用法

本文作者:sodme本文出处:http://blog.youkuaiyun.com/sodme声明:本文可不经作者同意,任意被转载、引用、复制,但任何对本文的引用都必须注明本文作者,出处以及本行声明信息。谢谢。  作为WIN平台下同时管理数千个连接的最为高效的网络模型,完成端口已经被越来越多的人认识和熟悉。通常情况下,一种经典的完成端口使用模式是:  (1)创建完成端口,并在指定端口开始监听;  (2)创建接

大宝(sodme)的专栏 6326

IOCP详细理解

详细清楚的讲解IOCP本质原理,使初学者少走弯路

完成端口(CompletionPort)详解 - 手把手教你玩转网络编程系列之三

手把手叫你玩转网络编程系列之三    完成端口(Completion Port)详解                                                              ----- By PiggyXP(小猪) 前 言         本系列里完成端口的代码在两年前就已经写好了,但是由于许久没有写东西了,不知该如何提笔,所以这篇文档总是在酝酿

小猪的网络编程 22万+

Java分布式流处理,flink+kafka实现电商网站个性化商品推荐系统

在现代电商环境中,用户每天都会浏览大量商品页面,而这些行为数据中蕴藏着丰富的信息。通过分析用户的浏览历史、购买记录以及对特定商品的兴趣程度,我们可以为用户提供更加个性化的商品推荐,从而提升用户体验和转化率。为了实现实时的个性化推荐,我们需要构建一个能够快速处理并响应用户行为变化的数据处理管道。

横竖撇折点 2144

SAP 发货在途库存管理:POD确认差异下的2种后续调整方案对比

本文详细解析了SAP发货在途库存管理中POD确认差异后的财务调整方案,对比了移动类型417和555 T两种处理方式的适用场景及财务影响。通过实际案例说明如何优化POD流程,减少库存差异损失,提升供应链管理效率。特别适合SAP SD模块用户及供应链管理人员参考。

chiman6219的博客 395

windows IOCP取消绑定Socket

mysocket正在连接中, 我们又要在mysocket通信中把它从IOCP分离出来。如果我们使用closesocket(mysocket),明显不符合我们的需求。1. 默认情况下我们创建一个mysocket, 然后用CreateIoCompletionPort函数把mysocket和IOCP完成端口绑定在一起。很明显第3步被动技能,靠closesocket(mysocket)的释放原因,IOCP才会取消mysocket的绑定。虽然网络有大神分享过这个方法,但也只是随便性略过,并没有给出完整性代码。

MicrLeo的博客 400

流形优化: Manifold Optimization 的 全网最通俗版本详解 (一)

前言 之前忙于论文, 停更了很久。 接下来的一段时间,出于各种原因, 决定在优快云平台上做 最近在 混合波束成形 及 智能反射面 领域 非常常见的流形优化 (Manifold Optimization) 算法 的专题介绍。尽管目前已有了不少的中文博客, 但出于其各种弊端, 使得本篇的成文仍有其不可或缺的意义。 而如果要盘点最核心的意义, 就在于这篇是对读者的 数学能力 与 阅读理解能力 要求最低的 流形优化讲解了。 唯一参考的文献为 Manopt 工具包作者 Boumal 的 新书: An introd

B417科研笔记 2万+

完成端口(Completion Port)详解

http://blog.youkuaiyun.com/piggyxp/article/details/6922277 手把手叫你玩转网络编程系列之三 完成端口(Completion Port)详解 ----- By PiggyXP(小猪) 前 言 本系列里完成端口的代码在两年前就已经写好了,但是由于许久没有写东西了,不知该如何提笔,所以这篇文档总是在酝酿之中……酝酿了两年之后,终于决定开始

l799623787的专栏 1675

在pycharm2021.2中学习opencv图像处理,基于python3.9.7、pycharm完成配置

在pycharm中学习opencv图像处理安装python下载python安装包开始安装安装pycharm社区版下载pycharm开始安装如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 安装python 使用pycharm学习opencv应该是最简单的了,对新手比较友好,

steveqobs 7708

解决相同型号USB设备在Windows系统中重复枚举问题

本文详细解析了Windows系统中相同型号USB设备重复枚举问题的成因及解决方案。通过修改注册表、使用PsTools工具清除设备记录以及编程实现自动化处理等方法,有效解决设备识别混乱问题,特别适用于自动化测试和工业设备管理场景。

weixin_42561040的博客 565

深入理解 Windows IOCP(IO 完成端口)

Windows IOCP 异步 I/O 框架摘要 IOCP(I/O 完成端口)是 Windows 提供的高性能异步 I/O 解决方案,适合处理大量并发连接。核心机制是通过重叠 I/O 发起异步操作,由完成端口统一接收 I/O 完成通知,工作线程通过 GetQueuedCompletionStatus 获取事件处理。 关键特点: 使用少量线程处理大量连接 减少线程切换开销 支持重叠 I/O 异步操作 基本使用流程: 创建完成端口 绑定 Socket 到完成端口 发起重叠 I/O 操作 工作线程处理完成事件 文

charlie114514191的博客 926

10、GPU发展历程:从光线追踪到网格着色器的技术革新

本文回顾了GPU的发展历程,重点探讨了从光线追踪到网格着色器的技术革新。涵盖了DirectX 12时代(2015-2020)光线追踪与AI结合的突破,包括NVIDIA的Volta架构、DLSS技术原理及可变速率着色的应用。随后介绍了DirectX 12 Ultimate时代(2020)网格着色器的引入,分析了其计算模型、细粒度控制能力及跨平台优势。最后总结了着色器的演变及GPU在多个领域的广泛应用。

ol789012345的博客 185

一个对Winsock完成端口模型封装的…

在WINDOWS下进行网络服务端程序开发,毫无疑问,Winsock 完成端口模型是最高效的。Winsock的完成端口模型借助Widnows的重叠IO和完成端口来实现,完成端口模型懂了之后是比较简单的,但是要想掌握Winsock完成端口模型,需要对WINDOWS下的线程、线程同步,Winsock API以及WINDOWS IO机制有一定的了解。如果不了解,推荐几本书:《Inside Windows

windworst的专栏 892

图像紫边消除(depurple)

对图像紫边形成原因、消除方法进行了介绍。

沧海一升的博客 7565

基于YOLOv11与相机标定的齿轮尺寸测量系统

本文详细介绍了一种基于深度学习的目标检测算法YOLOv11与相机标定技术相结合的齿轮尺寸自动测量系统。该系统能够实时检测图像中的齿轮目标,并精确测量其关键尺寸参数,包括齿顶圆直径、齿根圆直径、模数等。我们构建了完整的深度学习解决方案,包含数据采集与标注、模型训练、相机标定、尺寸测量算法以及用户友好的UI界面。本文提供了完整的代码实现,并推荐了相关的参考数据集,为工业视觉检测领域提供了实用的技术方案。关键词:YOLOv11;齿轮检测;尺寸测量;相机标定;深度学习;工业视觉python。

YOLO 411

103.网游逆向分析与插件开发-网络通信封包解析-网络完成端口模型的流程

这时如果完成端口有消息,就可以立马得到响应,然后通过重叠结构得到要做什么操作,GetQueuedCompletionStatus里WSASend、WSARecv、AcceptEx这三个操作都会得到(得到的不止这三个),然后就能得到 WSASend、WSARecv、AcceptEx 分别注册的消息,然后通过这注册的消息,去做对应的逻辑,也就是在 GetQueuedCompletionStatus 后面就可以找到 Recv这个操作,然后紧跟着数据解密(如果有加密的话),数据处理(就是数据解密完可以用了)

计算机王的博客 1401

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

完成端口IOCP详解(原理)

完成端口IOCP详解 Posted on 2017-06-23 09:41 talenth 阅读(19268) 评论(8) 编辑 收藏 修改自: http://blog.youkuaiyun.com/piggyxp/article/details/6922277 ps: 原作者很厉害了, 把一个iocp模型讲解的这么形象,不过在实践过程中发现一些细节说得有问题, 在文中标红指出, 另外删掉了原文中一...

yygyyygy1233的博客 2042

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

WinSock入门

手把手教你玩转SOCKET模型之重叠I/O篇(上) 手把手教你玩转SOCKET模型之重叠I/O篇(下) 手把手教你玩转网络编程模型之完成例程(Completion Routine)篇(上) 手把手教你玩转网络编程模型之完成例程(Completion Routine)篇(下) 完成端口(CompletionPort)详解 - 手把手教你玩转网络编程系列之三 稳定的完成端

v2nero的专栏 507

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

上一篇: 如何使用Delphi设计强大的服务器程序
下一篇: 用完成端口开发大响应规模的Winsock应用程序
Devillyd
博客等级 码龄23年 58粉丝 101原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值