Python封装IOCP

VC++构建高性能HTTPSERVER:IOCP模型与Windows原生开发实践 网络编程中的I/O模型是构建高性能服务器的核心技术基础,它决定了程序处理并发连接的能力与效率。在Windows平台下,IOCP(I/O完成端口)机制通过异步非阻塞与线程池调度,实现了高并发网络请求的高效处理,成为开发高性能服务的首选方案。这项技术的核心价值在于能够以少量系统资源支撑上万并发连接,特别适合需要深度集成Windows系统特性的专用服务场景。例如,在开发需要常驻Windows服务器的监控Agent、对实时性要求极高的工业控制软件管理界面时,基于VC++和IOCP构建的原生HTTP服务器,能够实现零 阅读详情

    2011-07-22:源码下载:http://blog.youkuaiyun.com/jgood/article/details/6626872

    Python是一门简洁而优雅的语言,她的高生产率使我们能用最少的人力、物力、时间、财力代价解决眼前的问题。但是当解决了眼前的问题,一些更长远的问题就不得不考虑。

    利用Python自带的socket模块写网络服务器程序,很难能够承受上千个连接。我曾经参考赖勇浩同学的NetStream模块,使用Python自带的socket模块来编写通信模型,但实际的效果并不是很好,当连接数量达到800个左右的时候,cpu资源占用率就达70%-80%。当然可能是我写的代码质量比较差。Darkspy是高手,它自己封装的通信模型能够达到非常高的效率,可是我远没有达到他那样的水平。赖勇浩同学给我的意见是:在windows平台下要创建高性能的网络通信平台,最好使用IOCP。于是乎,这几天一直在尝试用Python来封装Iocp。

    Python本身是用C语言实现的,对c/c++的嵌入式扩展支持非常好,c/c++的代码只要简单的封装就可以被python调用,反之亦然。所以,使用c/c++来封装Iocp,然后用Python来调用,应该是个不错的解决方案。

    网上关于IOCP的资料非常多, 现成的代码也随处可见。别看它只要用两三个windows api函数就可以实现,但真正要理解IOCP、理解windows的重叠IO模型,还是要花费一般周折的。我花了大量的时间学习windows的重叠IO模型,参考网上的一些例子,用c++代码写出最简单的例子,然后用Python对其进行封装。对于windows重叠IO模型、IOCP的理解,我还是比较模糊,在接下来的一段时间里要好好消化。

    使用IOCP完成底层客户端socket的连接/断开、数据收发。将IOCP接收到的数据交给Python处理,Python处理完成后,再通过IOCP将数据发回客户端。大概的流程如下:ActivityDiagram1

    在我封装的IOCP模块中, 只提供了五个方法:

PyIocp.start(port, max_conn_count, buffer_size)

    该方法用于启动监听。参数port是监听的端口号;max_conn_count表示最大允许的连接数;buffer_size用于指定低层收发数据的缓冲区大小。如果函数启动成功,返回0。

PyIocp.stop()

    stop方法用于关闭监听。

PyIocp.recv()

    recv()方法返回接收到的数据。这里的数据,不单指socket发送/接收的数据,对于连接创建、连接断开,也是以数据的形式提供给Python的。可以根据返回的元组的第一个元素来判断数据的类型。例如:如果用户连接上服务器,那么通过调用recv()返回一个三元元组:(1, socket_id, “ip:port”);当用户断开连接时,返回(2, socket_id, “”);当接收到数据时,返回(4, socket_id, ‘这里是数据’); 如果当前没有数据,调用recv()方法将返回(0, 0XFFFFFFFF, “”)。

PyIocp.send(socket_id, data)

    send()方法用于发送数据。如果调用成功,返回发送数据的长度。如果操作失败,返回一个小于0的值。

PyIocp.close(socket_id)

    close()方法用于关闭指定连接。

    我用这个封装Iocp的模块写了一个简单的echo服务器来测试性能,当连接上4000个客户端,并进行大量数据通信的时候,系统的资源占用量在20%左右。虽然这与网上关于Iocp高性能的指标还有差距。

    让网络通信不再成为Python服务器的性能瓶颈,这就是我要达到的目的。嘻嘻~~ 非常感谢Darkspy,赖勇浩两位同学给我的意见和帮助。

 

    暂时不提供源码下载,有需要的同学,可以留言留下邮件。

MFC上位机集成IOCP实现高并发TCP通信 IOCP(输入输出完成端口)是Windows平台实现高并发网络通信的核心机制,其基于内核级异步I/O和线程池调度,可突破传统消息驱动模型的连接数瓶颈;原理上通过完成包队列与工作线程协作,避免消息泵阻塞与上下文切换开销,显著提升吞吐与响应实时性;技术价值在于支撑单机500+稳定长连接、低延迟数据采集与资源可控的工业级可靠性;典型应用于PLC数据采集、Modbus TCP上位机、仪器控制软件等Windows桌面工控系统;本文聚焦MFC框架下IOCP的零侵入集成方案,解决CSocket性能瓶颈与UI线程卡顿问题, 阅读详情

相关推荐

Python-YxdIocp是DelphiWindowsIOCP通讯模型封装

YxdIocp 是 Delphi Windows IOCP 通讯模型封装,基于DIOCP。YxdIocp包含有支持大并发的TCP服务组件、HTTP服务组件、UDP服务组件、WebSocket服

python iocp_Windows之IOCP

IOCP全称I/O Completion Port,中文译为I/O完成端口。IOCP是一个异步I/O的Windows API,它可以高效地将I/O事件通知给应用程序,类似于Linux中的Epoll,关于epoll可以参考1. 简介IOCP模型属于一种通讯模型,适用于Windows平台下高负载服务器的一个技术。在处理大量用户并发请求时,如果采用一个用户一个线程的方式那将造成CPU在这成千上万的线程间...

weixin_33945547的博客 856

python-iocp:从 code.google.comppython-iocp 自动导出

Pythoniocp 从 code.google.com/p/python-iocp 自动导出 该项目目前处于ALPHA阶段 本项目目前仅支持sockets,缺少通知阅读,但正在进行中,稍后再来查看本项目的新特​​性。 我们在 Python 上实现了对 Windows IOCP 的简单且可用的支持。 我们的模块没有外部依赖。 它仅使用 ctypes 并通过在运行时修补内置套接字类来工作。 示例代码: import IOCP_support IOCP_support.register() import select iocp = select.IOCP() iocp.register(my_socket) iocp.register(my_pipe) iocp.register(my_named_pipe) iocp.register(my_any_fd) iocp.registe

聊聊IOCP,聊聊异步编程

前言 IO完成端口(IO completion ports)在多核计算机的并行异步IO请求方面提供了一种高效的线程模型。当进程创建一个IO完成端口时,系统创建一个相关联的队列,其唯一目的是服务与那些请求。IO完成端口通常和预先分配的线程池配合,相比于一个一个创建线程,这使其更快更高效。IOCP在进程之间并不共享,一个IOCP及其句柄只和创建它的进程关联,但是一个进程中的多个线程可共享...

weixin_30565327的博客 183

完成端口实例

将Socket和完成端口操作集成于一个类CComplatePortSocket中。提供服务端和客户端测试代码。

JaCoCo报告聚合的5个常见坑点排查指南:从单模块到多模块的完整避坑手册

本文详细解析了JaCoCo在多模块Maven项目中生成聚合报告时的5个常见问题,包括多模块报告聚合失效、覆盖率数据不一致、增量构建导致的覆盖率丢失等,并提供了具体的配置示例和解决方案。帮助开发者高效排查和解决JaCoCo报告聚合中的各种疑难杂症,提升代码覆盖率分析的准确性和效率。

weixin_27918373的博客 250

python iocp_【tulip】 - IOCP

为了让I/O阻塞的时候,程序还可以去干别的。除了使用线程模型,让操作系统的内核去调度多个线程,Windows提供了IOCP机制。简单来说就是一个操作系统提供的回调机制。分成四个步骤生成key,并建立映射关系:向操作系统创建一个key,程序内部把这个key和一个回调函数对应起来调用:执行阻塞的I/O操作,并指定key来对应这个I/O操作轮询,返回key:程序轮询操作系统询问是否有新的I/O操作完成,...

weixin_39849254的博客 374

Seedance 2.5本地部署指南:AI生图与视频生成的完整实践

最近在AI生成内容领域,本地部署方案越来越受到开发者关注。特别是Seedance 2.5的发布,让很多原本依赖云端服务的用户开始转向本地化解决方案。本文将从实际使用角度出发,完整介绍Seedance 2.5的本地部署流程、功能特性对比以及实际应用技巧。 1. Seedance 2.5核心特性解析 1.1 什么是Seedance 2.5 Seedance 2.5是一款开源的AI生图和视频生成工具,支持在本地环境运行,无需联网即可实现高质量的图像和视频生成。相比之前的2.0版本,2.5在生成质量、运行效率和功能

weixin_42566121的博客 1673

python iocp_IOCP浅析

这一年半来一直在做游戏项目逻辑层,学会了不少东西,觉得自己应该看看服务器底层的东西了,主要的东西就是网络模块,网络模块是沿用以前项目的,在我们项目中被我们头改动过几次,现在还是比较稳定的。因为是Windows平台,所以用的依然是被大多数人神话了的IOCP,不过的确IOCP表现的非常不错。什么是IOCP?众所周知,为了绝对同步,所以很多模式都采用的是同步模式,而不是异步,这样就会产生很大情况下在等...

weixin_39877166的博客 736

嵌入式开发避坑指南:用DWT做延时函数,这几个细节不注意代码会跑飞

本文深入探讨了在Cortex-M嵌入式开发中使用DWT实现精确延时函数的关键技巧与常见陷阱。针对DWT_CYCCNT计数器应用中的内核兼容性、溢出处理、编译器优化等五大核心问题,提供了工业级稳健解决方案,帮助开发者避免代码跑飞风险,实现微秒级高精度延时控制。

weixin_42653691的博客 158

通达信【雷霆尊者排序】实战指南:高胜率竞价指标解析与优化策略

本文详细解析了通达信【雷霆尊者排序】指标在集合竞价阶段的应用,提供从基础设置到实战解码的完整指南。文章重点剖析了‘雷霆’、‘使者’、‘精选’等核心信号的逻辑与共振策略,并分享了如何结合K线、市场情绪进行综合研判与风险控制,旨在帮助短线交易者提升早盘选股效率与胜率。

pear55的博客 949

Python Twisted介绍

原文链接:http://www.aosabook.org/en/twisted.html 作者:Jessica McKellar Twisted是用Python实现的基于事件驱动的网络引擎框架。Twisted诞生于2000年初,在当时的网络游戏开发者看来,无论他们使用哪种语言,手中都鲜有可兼顾扩展性及跨平台的网络库。Twisted的作者试图在当时现有的环境下开发游戏,这一步走的非常...

weixin_30381793的博客 1614

激光雷达-IMU标定工具lidar_imu_calib保姆级教程(VLP-16实测)

本文提供激光雷达与IMU联合标定的详细实战教程,重点解析lidar_imu_calib工具在VLP-16上的应用。从环境部署、数据采集技巧到参数配置与结果验证,手把手指导完成标定全流程,并详解如何在LIO-SAM等SLAM系统中应用标定结果,确保传感器融合精度。

food6的博客 475

python iocp_Python封装IOCP | 学步园

2011-07-22:源码下载:http://blog.youkuaiyun.com/jgood/article/details/6626872Python是一门简洁而优雅的语言,她的高生产率使我们能用最少的人力、物力、时间、财力代价解决眼前的问题。但是当解决了眼前的问题,一些更长远的问题就不得不考虑。利用Python自带的socket模块写网络服务器程序,很难能够承受上千个连接。我曾经参考赖勇浩同学的Net...

weixin_39936388的博客 279

05 - matlab m_map地学绘图工具基础函数 - 设置比例尺指北针

本篇介绍下m_map中添加指北针(m_northarrow)、比例尺(m_ruler)和进行比例缩放(m_scale)的函数及其用法 。提供了 示例以便参考,罗列了 各函数可设属性。希望对绘图的你有所帮助。

weixin_43339605的博客 1946

uniapp - H5网页uni.getLocation报错getLocation:fail Geolocation permission denied.Get ipLocation failed.

uni.getLocation getLocation:fail Geolocation permission denied.Get ipLocation failed.,uni.getLocation定位失败,uni-app getLocation()无法获取定位,一直fail()uniapp移动端h5网页,uniApp微信内置浏览器定位失败,如何解决这个问题,uniapp h5 uni.getLocation获取位置失败怎么办,UNI-APP获取当前位置,uni.getLocation定位失败,unia

🏆 前端领域优质创作者 4241

python代码封装_iocp的python封装(示例)

有关IOCP的资料在网上有很多,本文只分享一下pyiocp的实现原理。第一次封装时,用一张图来描述使用pyiocp收发数据的过程:python/d680478b2e8f081cd16dc1da353fa3dc.gif" />由上图可以看出,服务器接收、发送的数据都通过pyiocp。在实际使用过程中,发现这种实现模式有一个问题:游戏服务器发送的数据包,一般都比较小(最大的也不过几K),而每个sock...

weixin_39622289的博客 248

BAT007:批量为当前目录下的文件夹添加前缀或后缀

摘要:编写批处理程序,实现批量为当前目录下的文件夹添加前缀或后缀。

qq_31762031的博客 4052

iocp的python封装(续)

原文地址:darkbull.net/python/bca/pyiocp/

3820

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

再次封装IOCP的收获

以前写过一篇用python封装IOCP的文章,这几天因朋友需要,再一次封装了iocp接口。这一次我并不是简单的把原有代码拿过来简单的修修改改,基本上是推到重来。改正第一次封装时的许多缺点,同时修正了许多bug,再回首看以前的代码,感觉自己在进步。这次封装iocp,收获了以下几点知识: 1. 数据的重复投递。一般情况下,一个Socket句柄在同一时刻最多只能有一次WSASend与SWARecv,...

泉水 233

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

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

Python asyncio事件循环的底层实现

asyncio.new_event_loop创建新的SelectorEventLoop实例(Unix)或ProactorEventLoop实例(Windows)。asyncio.get_running_loop获取当前正在运行的事件循环,是正确的方式。os.epoll_wait的超时参数:-1表示无限阻塞直到有事件,0表示立即返回(非阻塞),正数表示最多等待多少毫秒。loop = asyncio.get_event_loop() # Python 3.12中仍有,但不推荐。不需要手动判断平台。

raoxiaoz0425的博客 239

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

asyncio事件循环调优与性能瓶颈分析

本文深入探讨Python asyncio事件循环的性能调优策略。首先解析事件循环的核心机制,包括任务调度、I/O事件监听和回调管理三大职责。接着系统分析常见性能瓶颈:同步阻塞操作入侵、任务调度过载、I/O模型不匹配、资源管理失控和异常处理缺失。针对这些问题,提出五大调优方案:1)消除同步阻塞,使用异步I/O和线程池;2)优化任务调度,控制并发量并设置优先级;3)适配高效I/O模型和调整系统配置;4)规范资源生命周期管理;5)完善异常处理机制。文章还介绍了原生和第三方监控工具,强调调优需结合业务场景,通过压测

weixin_41943766的博客 704

python iocp_聊聊IOCP,聊聊异步编程

前言IO完成端口(IO completion ports)在多核计算机的并行异步IO请求方面提供了一种高效的线程模型。当进程创建一个IO完成端口时,系统创建一个相关联的队列,其唯一目的是服务与那些请求。IO完成端口通常和预先分配的线程池配合,相比于一个一个创建线程,这使其更快更高效。IOCP在进程之间并不共享,一个IOCP及其句柄只和创建它的进程关联,但是一个进程中的多个线程可共享。IOCP最关键...

weixin_39693193的博客 232

Python 3.15 asyncio重构深度解析:Event Loop调度器延迟降低63%?揭秘新IOCP/epoll混合调度器设计内幕

Python 3.15异步I/O模型优化显著提升高并发性能,通过重构asyncio事件循环,融合IOCP(Windows)与epoll(Linux)混合调度器,降低任务调度延迟达63%。适用于Web服务、实时通信等IO密集场景,调度更精准、资源占用更低。值得收藏。

AlgoFun的博客 303

OpenClaw跨平台封装实战:Nuitka原生二进制三端部署指南

在本地化AI工作流引擎兴起的背景下,‘跨平台原生部署’已成为保障数据主权与硬件直通能力的核心技术诉求。其本质是绕过容器虚拟化层,在Windows、Linux、macOS三大系统内核(IOCP/epoll/kqueue)、运行时(glibc/Apple Silicon/VC++)、权限模型(Gatekeeper/FDAccess/SELinux)差异间构建统一抽象。关键技术路径包括:使用Nuitka替代PyInstaller实现Python到机器码的编译封装,以消除解释器开销与反编译风险;通过Cython桥接

weixin_33853827的博客 534

更新整理本人所有博文中提供的代码与工具(C++,2014.09)

为了更方便地管理博文中涉及的各种代码与工具资源,现在把这些资源迁移到 GitHub 中,有兴趣者可前往下载。

~怪*_^兽~ 技术专栏 1324
上一篇: Sqlite c/c++ api 学习
下一篇: Python模块学习 ---- tempfile 临时文件(夹)操作
JGood
博客等级 码龄20年 498粉丝 65原创
评论 11
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值