下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
python监听⽹络请求_讲解Python中SocketServer模块处理⽹络请求SocketServer创建⼀个⽹络服务框架。它定义了类来处理TCP,UDP,UNIXstreams和UNIXdatagrams上的同步⽹络请求。⼀、ServerTypes有五个不同的服务器类在SocketServer中。1.BaseServer定义了API,⽽且他不是⽤来实例化和直接使⽤的。2.TCPServer⽤作TCP/IP的socket通讯。3.UDPServer使⽤datagramsockets。4.UnixStreamServer和UnixDatagramServer使⽤Unix-domainsockets⽽且智能在unix平台上使⽤。⼆、ServerObjects构建⼀个服务器,通过它来监听请求的地址和请求的处理类(notinstance)。1.classSocketServer.BaseServer这是模块中所有服务器对象的超类,它定义了接⼝,实现⼤多数都在⼦类中完成。2.BaseServer.fileno返回⼀个整数⽂件描述符来表⽰哪个服务器正在监听。这个函数最常见的传递给select.select(),允许监控多个相同处理过程的服务。3.BaseServer.handle_request处理单⼀的请求,这个函数会顺序调⽤接下来的⽅法。get_request(),verify_request和proccess_request。⽤户提供handle()⽅法抛出⼀个异常,那么handle_error()⽅法会被调⽤。self.timeout的时间内没有收到请求,handle_timeout()和handle_request()将返回。4.BaseServer.serve_foreverBaseServer.serve_forever(poll_interval=0.5),处理请求⼀直到明确的shutdown()请求。轮训每隔poll_interval时间内关闭。忽略self.timeout,如果需要使⽤定时任务,需要使⽤其他线程。5.BaseServer.shutdown告诉serve_forever()循环停⽌。6.BaseServer.RequestHandlerClass⽤户请求处理程序类,为每个请求创建这个类的⼀个实例。三、ImplementingaServer如果你创建⼀个服务器,它通常可以重复使⽤现有的类和简单的提供⼀个⾃定义请求处理的类。如果不符合需求,有⼏种BaseServer⽅法覆盖⼀个⼦类。1.verify_request(reqeust,client_address):必须返回⼀个布尔值,如果返回True,请求将被处理,如果返回False,请求将被拒绝。这个函数可以覆盖来实现访问控制服务。2.process_request(request,client_address):调⽤finish_request来创建⼀个RequestHandlerClass()的实例,如果需要该函数可以创建⼀个新的进程或协程来处理请求。3.finish_request(request,client_address):创建⼀个请求处理实例。调⽤handle()来处理请求。四、RequestHandlers
请求处理程序做的⼤部分⼯作接收传⼊的请求,并决定采取何种⾏动。处理程序负责实现“协议”上的套接字层(例如,HTTP或xml-rpc)。从传⼊的请求处理程序读取请求数据通道,流程,和写⼀个响应。有三个⽅法可以重写。1.setup():准备请求的请求处理程序,就是初始化运⾏在handle之前。2.handle():做真正的请求⼯作。解析传⼊的请求,处理数据和返回响应。3.finish():清理任意时间创建的setup()。五、例⼦下⾯例⼦展⽰了tcp,udp和异步1.TCPServer例⼦importSocketServerclassMyHandler(SocketServer.BaseRequestHandler):defhandle(self):self.data=self.request.recv(1024).strip()print'{}wrote:'.format(self.client_address[0])printself.dataself.request.sendall(self.data.upper())if__name__=='__main__':HOST,PORT='localhost',9999server=SocketServer.TCPServer((HOST,PORT),MyHandler)server.serve_forever()2.UDPServr例⼦importSocketServerclassMyHandler(SocketServer.BaseRequestHandler):defhandle(self):data=self.request[0].strip()socket=self.request[1]print'{}wrote:'.format(self.client_address[0])printdatasocket.sendto(data.upper(),self.client_address)if__name__=='__main__':HOST,PORT='localhost',9999server=SocketServer.UDPServer((HOST,PORT),MyHandler)server.serve_forever()3.异步例⼦可以通过ThreadingMixIn和ForkingMixIn类来构造异步处理程序。
importsocketimportthreadingimportSocketServerclassMyHandler(SocketServer.BaseRequestHandler):defhandle(self):data=self.request.recv(1024)curr_thread=threading.current_thread()response='{}:{}'.format(curr_,data)self.request.sendall(response)classServer(SocketServer.ThreadingMixIn,SocketServer.TCPServer):passdefclient(ip,port,message):sock=socket.socket(socket.AF_INET,socket.SOCK_STREAM)sock.connect((ip,port))try:sock.sendall(message)response=sock.recv(1024)print'Received:{}'.format(response)finally:sock.close()if__name__=='__main__':HOST,PORT='localhost',0server=Server((HOST,PORT),MyHandler)ip,port=server.server_addressserer_thread=threading.Thread(target=server.serve_forever)server_thread.daemon=Trueserver_thread.start()print'Serverlooprunninginthread:',server_client(ip,port,'HelloWorld1')client(ip,port,'HelloWorld2')client(ip,port,'HelloWorld3')server.shutdown()server.server_close()4.SocketServer实现客户端与服务器间⾮阻塞通信(1)创建SocketServerTCP服务端
#创建SocketServerTCP服务器:importSocketServerfromSocketServerimportStreamRequestHandlerasSRHfromtimeimportctimehost='xxx.xxx.xxx.xxx'port=9999addr=(host,port)classServers(SRH):defhandle(self):print'gotconnectionfrom',self.client_addressself.wfile.write('connection%s:%sat%ssucceed!'%(host,port,ctime()))whileTrue:data=self.request.recv(1024)ifnotdata:breakprintdataprint"RECVfrom",self.client_address[0]self.request.send(data)print'serverisrunning....'server=SocketServer.ThreadingTCPServer(addr,Servers)server.serve_forever()(2)创建SocketServerTCP客户端fromsocketimport*host='xxx.xxx.xxx.xxx'port=9999bufsize=1024addr=(host,port)client=socket(AF_INET,SOCK_STREAM)client.connect(addr)whileTrue:data=raw_input()ifnot
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 周期信号的合成与分解以及在matlab上的实现
- 学生信息管理系统软件可行性研究报告
- 贵州省玉屏侗族自治县2027届数学三上期末预测试题含解析
- 2027届河南省郑州市邙山区六年级数学第一学期期末质量跟踪监视试题含解析
- 铁力市2027届四上数学期末经典模拟试题含解析
- 大姚县2027届三年级数学第一学期期末考试试题含解析
- 市场信息收集管理规范
- 2026年中国刻花灯罩市场调查研究报告
- 2026年中国制动后分泵市场调查研究报告
- 钢筋翻样加工施工方案
- 高考物理一轮复习 考点精讲 考点08 实验:探究弹簧弹力与形变量的关系 (原卷版)
- 皋埠中学分班考试试卷及答案
- 磁粉探伤一级(取证复习题)练习试题
- DB43-T 2390-2022 小龙虾人工繁育技术规程
- JG/T 13-1999门式钢管脚手架
- 2024年云南省昆明市官渡区小升初数学试卷(含答案)
- 《PLC应用项目工单实践教程》课件 模块6 函数、函数块、数据块及应用
- GB/T 44948-2024钢质模锻件金属流线取样要求及评定
- 备考2025高考物理“二级结论”精析与培优争分练讲义-01 共点力平衡(教师版)
- 广联达GTJ建模进阶技能培训
- 涉密人员违规处罚
评论
0/150
提交评论