位置: 编程技术 - 正文

Python的Asyncore异步Socket模块及实现端口转发的例子(python asyncio await)

编辑:rootadmin

推荐整理分享Python的Asyncore异步Socket模块及实现端口转发的例子(python asyncio await),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python3.7 asyncio,python asyncio await,python3.7 asyncio,python asyncore,python asyncio 异常处理,python asyncio,python asyncio,python asyncore,内容如对您有帮助,希望把文章链接给更多的朋友!

Asyncore模块提供了以异步的方式写入套接字服务客户端和服务器的基础结构。

只有两种方式使一个程序在单处理器上实现“同时做不止一件事”。多线程编程是最简单和最流行的方式,但是有另一种很不一样的技术,可以使得我们保持多线程的几乎所有优势,却不用真正使用多线程。 如果你的程序主要是受I/O限制的,这是唯一可行的方式。如果你的程序是受处理器限制的,则先发制人的调度线程可能是你真正需要的。但是,很少网络服务器是受处理器限制的。

如果您的操作系统支持在其I / O库的 select() 系统调用(几乎所有系统都支持),那么你可以用它一次处理多个通信信道;当你的I/O在后台忙碌时处理其他工作。虽然这一策略似乎很奇怪很复杂,尤其是最开始的时候,这在很多方面比多线程编程更容易理解和控制。asyncore 模块为你解决了很多困难,使你能快速构建复杂的高性能网络服务器和客户端。对于会话应用程序和协议, asynchat 模块是非常有用的。

两个模块背后的想法就是创建一个或者多个网络 通道, 及 asyncore.dispatcher 和 asynchat.async_chat 类的实例. 如果你没有提供自己的映射的话,创建通道会把这两个实例加到由 loop() 函数使用的全局映射中。

Python的Asyncore异步Socket模块及实现端口转发的例子(python asyncio await)

一旦初始化通道被创建,调用 loop() 函数会激活通道服务,这会持续到最后一个通道(包括所有在异步服务中被加到映射中的通道)被关闭。 该模块文件包含一个loop()函数和一个dispatcher基类,其中loop()函数是全局函数,负责检查一个保存着dispatcher实例的dict,也被称为channel。每一个继承dispatcher类的对象,都可以看作需要处理的socket,因此使用时我们只需定义一个继承dispatcher的类,然后重写一些方法就行,一般都是以handle_开头的方法。

端口转发的示例如果你的程序想在同一时间做一件一上的事情,多线程是最快也最普遍的方式,但还有一个方式,在I/O流量很大的时候特别实用。如果你的操作系统支持select函数,你就可以让I/O在后台读写。这个模块听起来很复杂,但实际上有很多方式可以理解它,这个文档帮你解决了这些问题。我感觉这个模块应该是一个以事件驱动的异步I/O,跟C++的事件选择模型类似。每当发生了读、写事件后,会交由我们重写的事件函数进行处理。我这里有一个使用asyncore模块编写端口转发脚本,从这个脚本可以大概了解asyncore的基本使用。在文章中,所说的客户端就是我们的电脑,服务端是转发到的地址。也就是客户端发送到这个脚本的信息,这个脚本转发到服务端上。首先,定义一个forwarder类:

这个类继承自asyncore模块的dispatcher类(它就是我们的主要的类,其中包括了一些之后要重载的函数),构造函数获得5个参数,第1、2个参数是脚本监听的本地IP和端口,第3、4个参数是服务端的IP和端口。第5个参数是listen函数的参数,等待队列最大长度。如何使用这个类,只需要如下新建一个对象,把相应IP和端口传入,再进入loop即可:

进入loop后相当于开启了一个守护线程,在后台一直运行着,等待socket事件的发生。因为我们这个脚本是端口转发工具,所以实际上运行的过程是:客户端连接这个脚本的端口,让后发送给这个端口的数据脚本自动转发到服务端地址和端口。所以,首先接收到的应该是连接消息(accept事件)。那么,当accept事件发生后,就进入了handle_accept函数中。所以我们看到,handle_accept函数实际上就是调用了accept函数接收了客户端连接对象和地址。获得了之后又新建了一个sender类对象,这个对象定义如下:

这个类也是继承自asyncore.dispatcher,它的构造函数接收3个参数,分别是recv对象(这个之后说到),远端地址,对应端口。函数中又新建了一个socket,这个socket就是和服务端端口通信的socket,然后调用connect连接这个端口。之后其实也是进入了一个等待消息的过程,因为我们发送了一个connect,所以下一次接收到的消息应该是connect,而handle_connect是一个pass掉的函数。没有执行任何内容。在连接完成后,我们就相当于建立好了一个端口转发的通道。当客户端向这个脚本监听的端口发送数据包时,它就会自动转发到服务端端口上。服务端端口返回的数据包,会自动转发到客户端上。回到构造函数的第1个参数,我们在forwarder类函数中可以看到,传入的是一个receiver(conn)对象,receiver也是一个类,我们来看看这个类的定义:

它也是继承了asyncore.dispatcher,构造函数只接收一个参数,就是connect的返回值,一个连接对象。实际上这个对象它就是监听、处理与客户端的通信,而之前说的sender对象是监听、处理与服务端的通信。

python3.5仿微软计算器程序 本文实例为大家分享了python3.5仿微软计算器的具体代码,供大家参考,具体内容如下fromtkinterimport*frommathimport*root=Tk()root.title("计算器")root.geometry("x+

使用python3.5仿微软记事本notepad 本文实例为大家分享了python3.5仿微软记事本的具体代码,供大家参考,具体内容如下fromtkinterimportfiledialogimporttkinterastkimporttkinter.scrolledtextastkstfromtkinterim

python3音乐播放器简单实现代码 本文实例为大家分享了python3音乐播放器的关键代码,供大家参考,具体内容如下fromtkinterimport*fromtracebackimport*fromwincom.clientimportDispatchimporttime,eyed3,thread

标签: python asyncio await

本文链接地址:https://www.jiuchutong.com/biancheng/387664.html 转载请保留说明!

上一篇:详解Python中heapq模块的用法(python3 heapq)

下一篇:python3.5仿微软计算器程序(微软python视频教程)

  • 如何查询企业税务状态
  • 新个税年终奖计算公式
  • 员工离职社保未及时减员怎么处理
  • 企业所得税季初不能是0
  • 兼职工资如何发放给个人
  • 车辆停放服务属于交通运输服务吗
  • 忘记先抄税再申报了怎么办
  • 清洗汽车的目的
  • 购进财务软件折旧怎么算
  • 增值税预缴税金交错了怎么办
  • 出让固定资产怎样计算增值税
  • 设备售后回租需交税吗
  • 公司开办费有哪些
  • 开红字发票如何调整收入?
  • 外派人员的一次工作总结
  • 应收账款预付账款属于什么科目
  • 什么是个体工商户业主
  • 上海房产税如何退税
  • 低值易耗品进项税额转出账务处理
  • 集体房产证如何分割
  • 资产负债表损益表现金流量表
  • 销货成本销货成本是什么类账户
  • 网上报税申报成功之后该怎么操作
  • 公司缴纳递延所得税吗
  • 单独出售的包装物是否属于包装物的核算范围
  • 业务招待费是什么科目
  • 已开票不确认收入未收款怎么做账
  • php面向对象优点,缺点
  • 电脑语言栏不见了,打不出汉字
  • 桔梗的功效与作用吃法
  • 设备租赁费属于劳务吗
  • 公司出租房屋租赁发票税率
  • php实现图片上传显示
  • 哪些货物可以享受减免税政策
  • 银行手续费未开发票
  • 一次性劳务报酬所得如何扣税
  • html5新增的标签元素有哪些
  • 前端必学课程
  • vue数据可视化大屏布局
  • Laravel+jQuery实现AJAX分页效果
  • pwcorr_a命令
  • 所得税年度报表申报完怎么打印
  • 开票显示税收分录怎么办
  • 建安企业确认收入的依据
  • 印花税怎么交税率是多少
  • 个税系统经营所得人员怎样添加
  • 一般纳税人开普票要交税几点
  • 其他综合收益和营业外收入的区别
  • 无形资产的税费需要累计摊销吗
  • 个体定期定额怎么征税
  • 什么叫代销合同
  • 待抵扣进项税额和待认证进项税额的区别
  • 汇算清缴缴纳的所得税怎么做账
  • 一次性补缴一年社保
  • 企业应如何降低消费者
  • 无形资产入股交税吗
  • mysql 正则表达式分组替换
  • xp系统找不到指定的路径怎么办
  • win10每次开机都假死机
  • win2008r2下载
  • ubuntu开启图形化界面
  • VirtualBox虚拟机中文免费
  • 国产操作系统有免费的吗
  • apt-get download
  • win7移动硬盘写保护了怎么解除
  • win7系统纯净版和旗舰版有什么区别
  • 应该怎么修复
  • unity3d官方案例
  • jQuery.parseHTML() 函数详解
  • nodejs利用http模块实现银行卡所属银行查询和骚扰电话验证示例
  • java调用curl命令
  • dos命令chkdsk
  • js中cookie的用法
  • 新办企业税务登记后还需要办理哪些业务
  • 运输费用抵扣税率最新规定
  • 华为税务筹划情况
  • 房地产企业税种认定标准
  • 申请电子发票需要盖章吗
  • 徐州房产过户手续流程
  • 残疾人个体工商户补贴
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设