位置: 编程技术 - 正文

Python探索之SocketServer详解(python socket操作)

编辑:rootadmin

推荐整理分享Python探索之SocketServer详解(python socket操作),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python socket教程,python socket操作,python-socketio,python-socketio,python socket教程,python socket struct,python socket,python socket,内容如对您有帮助,希望把文章链接给更多的朋友!

SocketServer,网络通信服务器,是Python标准库中的一个模块,其作用是创建网络服务器。SocketServer模块定义了一些类来处理诸如TCP、UDP、UNIX流和UNIX数据报之上的同步网络请求。

SocketServer模块处理网络请求的功能,可以通过两个主要的类来实现:一个是服务器类,一个是请求处理类。服务器类 处理通信问题,如监听一个套接字并接收连接等;

请求处理类 处理“协议”问题,如解释到来的数据、处理数据并把数据发回给客户端等。

这种实现将服务器的实现过程和请求处理的实现过程解耦,这意味着我们可以将不同的服务器实现和请求处理实现结合起来来处理一些定制的协议,例如一个TCP服务器类和一个流请求处理类结合,处理基于TCP的网络请求。同时,也可以基于SocketServer模块中的服务器类和请求处理类,实现网络层之上应用层的服务器和请求处理实现,例如基于TCP服务器类实现HTTP服务器,基于流处理请求类实现HTTP请求处理类等。

服务器类

SocketServer模块中定义了五种服务器类。BaseServer(服务器的基类,定义了API)TCPServer(使用TCP/IP套接字)UDPServer(使用数据报套接字)UnixStreamServer(使用UNIX域套接字,只适用UNIX平台)UnixDatagramServer(使用UNIX域套接字,只适用UNIX平台)

1. 构造服务器对象

要构建一个服务器对象,需要向它传递一个地址server_address(服务器将在这个地址上监听请求),以及一个请求处理类RequestHandlerClass(不是请求处理实例)。服务器类基类的构造函数如下:

后,可以构造TCPServer、UDPServer、UnixStreamServer、UnixDatagramServer。其中,TCPServer继承自BaseServer,UDPServer和UnixStreamServer继承自TCPServer,UnixDatagramServer继承自UDPServer。各个服务器类型可以根据自己的特点对基类进行扩展,例如创建监听套接字、绑定监听地址和端口、进行监听等。一旦实例化服务器对象,便可以使用服务器的方法来监听和处理请求。

2. 实现服务器

由于SocketServer模块中定义的五种服务器类中,除了基类BaseServer和TCPServer外,其余的三个类都是直接或间接地继承自TCPServer。因此,以下以TCPServer的实现过程为例进行说明。

Python探索之SocketServer详解(python socket操作)

构造TCPServer。 构造TCPServer时,构造函数创建了一个套接字(这个套接字可以通过更改地址簇和类型用于其他服务器)用于监听请求。并且调用server_bind()绑定监听的地址和端口,调用server_activate()开始监听。

启动服务器。 服务器实例化后,可以使用serve_forever()或者handle_request()来监听和处理请求,实现服务器功能。这两个方法的具体实现依赖于_handle_request_noblock()方法。这个方法是BaseServer类中定义的。具体实现如下:

处理请求。 根据上一步骤启动服务器后,服务器便开始监听请求。如果接收到请求信息,便开始处理请求。由_handle_request_noblock()可以看出有几个函数比较重要。

get_request() ——这个函数可以在子类中重写。在TCPServer中,该函数调用监听套接字的accept()方法,返回请求request和客户端地址client_address。

verify_request(request, client_address) ——这个函数可以在子类中重写。该函数返回True表示处理请求,返回False表示忽略请求。

process_request(request, client_address) ——这个函数可以在子类中重写。该函数将调用finish_request()具体完成请求的处理过程,并且在处理完请求后关闭请求。

finish_request(request, client_address) ——该函数将构造一个请求处理类的实例。请求处理类被实例化后将调用其handle()方法处理请求。

3. 进程/线程支持

SocketServer模块中还提供了一些”mix-in”类:ForkingMixIn和ThreadingMixIn。这些类可以和服务器类混合使用,很容易改变服务器,为每个请求使用一个单独的进程或线程。具体的服务器类有:

class ForkingUDPServer(ForkingMixIn, UDPServer)class ForkingTCPServer(ForkingMixIn, TCPServer)class ThreadingUDPServer(ThreadingMixIn, UDPServer)class ThreadingTCPServer(ThreadingMixIn, TCPServer)class ThreadingUnixStreamServer(ThreadingMixIn, UnixStreamServer)class ThreadingUnixDatagramServer(ThreadingMixIn, UnixDatagramServer)

请求处理类

要接收到来的请求以及确定采取什么行动,其中大部分的工作都是由请求处理类完成的。请求处理类负责在套接字层之上实现协议。具体过程为:读取请求、处理请求、写回响应。请求处理类基类中定义了3个方法,子类中需要重写。

setup() ——为请求准备请求处理器handle() ——对请求完成具体的工作。诸如解析到来的请求,处理数据,并发回响应等。finish() ——清理setup()期间创建的所有数据

总结

标签: python socket操作

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

上一篇:Bottle框架中的装饰器类和描述符应用详解(pebble框架)

下一篇:python探索之BaseHTTPServer-实现Web服务器介绍(python挑战)

  • 个税手续费返还交增值税,但是6%的那行是灰色的
  • 房屋租金可以开发票吗
  • 银行承兑汇票和支票的区别
  • 年前一个月工资年后发
  • 有限合伙企业要交增值税吗
  • 自来水开出发票的税率是多少
  • 委托付款税务认可吗
  • 增值税加计扣除是什么意思啊
  • 公司车辆的维修费挂什么科目
  • 销售企业资金风险点有哪些呢
  • 劳务公司的暂估费是什么
  • 固定资产清理后卡片如何处理
  • 不动产修理领用原材料账务处理?
  • 收入做多增值税怎么算
  • 待处理财产损益借方余额代表什么
  • 投资项目非股权比例
  • 公司发的奖金可以直接公司账户转账给员工吗?
  • 什么情况下进项税额不得从销项税额中抵扣
  • 非居民企业减免的利息是否交增值税
  • 公司买理财产品的账务处理
  • 劳务公司的税率是多少经营模式
  • 如何办理临时经营纳税人设立登记
  • 固定资产被替换部件的会计处理
  • 作价入股的土地可以摊销无形资产吗
  • 库存商品结转会计分录
  • windows11禁止自动更新
  • guest的作用
  • 如何删除文档中多余的页
  • 招待审计人员
  • 王者荣耀中廉颇是哪一个族的族长
  • thinkphp框架介绍
  • 固定资产清理属于什么类科目
  • 前端解决浏览器跨域问题
  • 多申报缴纳的企业年金
  • 猿创征文,宝藏工具篇
  • 所得税申报表上的营业成本怎么填
  • 现金盘盈盘亏怎么处理
  • 什么情况下可以转入资本公积
  • 个税可以补申报几个月的码
  • 非财政补助结转和非财政补助结余的区别
  • 个体户开普票有没有完税证明
  • 季末资产总额怎么计算出来的
  • 理财收益 投资收益
  • 预收账款收了没
  • 非独立核算的分公司需要独立建账吗
  • 开发支出与研发支出的区别
  • 典当行必须出具当票吗
  • 净值型 赎回
  • 应收票据周转率公式
  • 退还多余的预收款项的会计分录
  • 固定资产台账具体做什么
  • 税控设备全额抵减
  • 理财产品利息计入本金吗
  • 建设工程施工管理
  • 固定制造费用包括变动制造费用吗
  • 多收客户购置税怎么处理
  • 公司拿房子抵债需要缴纳什么税费
  • 公司转让二手车需要缴纳什么税
  • 出售无形资产属什么科目
  • 无形资产的商誉是什么
  • fedora linux安装教程
  • 教你鉴别耳机音质的好坏的几大技巧
  • macbook像素能不能提高
  • dos命令提示符窗口怎么打开
  • aix操作命令
  • raid主要使用三种技术
  • ubuntu怎么安装程序
  • u盘运行win10系统
  • win7开机假死
  • linux关闭系统
  • 升级win10后东西还在吗
  • 编写高质量代码改善JAVA程序的151个建议
  • js 延迟函数
  • service与activity数据交互
  • js函数的声明方式
  • 税务局把我拉入黑名单了怎么办
  • 广东省电子税务局官网登录入口
  • 浦东经济开发区官网
  • 重庆市国税网官方网站
  • 闵行区注册公司,闵行区税务筹划,哪
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设