服务器类型5种类型:BaseServer , TCPServer , UnixStreamServer , UDPServer , UnixDatagramServer 。注意:BaseServer不直接对外服务 。
服务器对象•class SocketServer.BaseServer:这是模块中的所有服务器对象的超类 。它定义了接口 , 如下所述 , 但是大多数的方法不实现 , 在子类中进行细化 。
•BaseServer.fileno():返回服务器监听套接字的整数文件描述符 。通常用来传递给select.select(), 以允许一个进程监视多个服务器 。
•BaseServer.handlerequest():处理单个请求 。处理顺序:getrequest(), verifyrequest(), processrequest() 。如果用户提供handle()方法抛出异常 , 将调用服务器的handleerror()方法 。如果self.timeout内没有请求收到 , 将调用handletimeout()并返回handle_request() 。
•BaseServer.serveforever(pollinterval=0.5): 处理请求 , 直到一个明确的shutdown()请求 。每poll_interval秒轮询一次shutdown 。忽略self.timeout 。如果你需要做周期性的任务 , 建议放置在其他线程 。
•BaseServer.shutdown():告诉serve_forever()循环停止并等待其停止 。python2.6版本 。
•BaseServer.addressfamily: 地址家族 , 比如socket.AFINET和socket.AF_UNIX 。
•BaseServer.RequestHandlerClass:用户提供的请求处理类 , 这个类为每个请求创建实例 。
•BaseServer.server_address:服务器侦听的地址 。格式根据协议家族地址的各不相同 , 请参阅socket模块的文档 。
【python使用SocketServer实现网络服务器】•BaseServer.socketSocket:服务器上侦听传入的请求socket对象的服务器 。
服务器类支持下面的类变量:
•BaseServer.allowreuseaddress:服务器是否允许地址的重用 。默认为false , 并且可在子类中更改 。
•BaseServer.requestqueuesize
请求队列的大小 。如果单个请求需要很长的时间来处理 , 服务器忙时请求被放置到队列中 , 最多可以放requestqueuesize个 。一旦队列已满 , 来自客户端的请求将得到 “Connection denied”错误 。默认值通常为5 , 但可以被子类覆盖 。
•BaseServer.sockettype:服务器使用的套接字类型; socket.SOCKSTREAM和socket.SOCK_DGRAM等 。
•BaseServer.timeout:超时时间 , 以秒为单位 , 或 None表示没有超时 。如果handlerequest()在timeout内没有收到请求 , 将调用handletimeout() 。
下面方法可以被子类重载 , 它们对服务器对象的外部用户没有影响 。
•BaseServer.finish_request():实际处理RequestHandlerClass发起的请求并调用其handle()方法 。常用 。
•BaseServer.get_request():接受socket请求 , 并返回二元组包含要用于与客户端通信的新socket对象 , 以及客户端的地址 。
•BaseServer.handleerror(request, clientaddress):如果RequestHandlerClass的handle()方法抛出异常时调用 。默认操作是打印traceback到标准输出 , 并继续处理其他请求 。
•BaseServer.handle_timeout():超时处理 。默认对于forking服务器是收集退出的子进程状态 , threading服务器则什么都不做 。
•BaseServer.processrequest(request, clientaddress) :调用finish_request()创建RequestHandlerClass的实例 。如果需要 , 此功能可以创建新的进程或线程来处理请求,ForkingMixIn和ThreadingMixIn类做到这点 。常用 。
•BaseServer.server_activate():通过服务器的构造函数来激活服务器 。默认的行为只是监听服务器套接字 。可重载 。
•BaseServer.server_bind():通过服务器的构造函数中调用绑定socket到所需的地址 。可重载 。
•BaseServer.verifyrequest(request, clientaddress):返回一个布尔值 , 如果该值为True , 则该请求将被处理 , 反之请求将被拒绝 。此功能可以重写来实现对服务器的访问控制 。默认的实现始终返回True 。client_address可以限定客户端 , 比如只处理指定ip区间的请求 。常用 。
请求处理器处理器接收数据并决定如何操作 。它负责在socket层之上实现协议(i.e., HTTP, XML-RPC, or AMQP) , 读取数据 , 处理并写反应 。可以重载的方法如下:
•setup(): 准备请求处理. 默认什么都不做 , StreamRequestHandler中会创建文件类似的对象以读写socket.
•handle(): 处理请求 。解析传入的请求 , 处理数据 , 并发送响应 。默认什么都不做 。常用变量:self.request , self.client_address , self.server 。
推荐阅读
- 怎么用集分宝 集分宝在支付的时候怎么使用
- 并使用java实现 一文彻底看懂Base64编码解码原理
- 使用原生的js实现简易的图片延时加载
- 在我们日常使用中,选择喷墨打印机还是激光打印机呢?
- 远程桌面管理工具novnc的搭建和使用
- 使用python实现UDP编程
- 妙控鼠标2使用教程 妙控鼠标2有哪些手势
- 手把手教你用84消毒液 84消毒液使用方法
- 保证手机流畅稳定运行的使用小技巧、适用于所有手机
- 微信删除好友怎么恢复好友?微信删掉的好友怎么找回