socketserver
Posted zzq888
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了socketserver相关的知识,希望对你有一定的参考价值。
socketserver
此模块简化了socket的编写。
1、它有一个基类,定义了如何建立连接。BaseServer提供了服务类接口,BaseServer使用了select创建了多线程。BaseServer下面有四个类:TCPServer、UnixStreamServer、UDPserver、UnixDatagramServer。
2、它还提供了请求处理类:定义了如何处理用户数据。定义了三个方法setuphandlerfinish,的接口,使用时,重新写对应方法。
3、使用Forktheard和
BaseServer模块结构:
服务处理类方法: |
作用 |
BaseServer | 超类,提供了API,并利用select创建了多线程。不能直接调用它使用。 |
TCPServer | 创建每个进程的socket,传输TCP数据。同时,也是一个基类。 |
UDPServer | 传输UDP数据。 |
UnixStreamServer | Unix下使用 |
UnixDatagramServer | Unix下使用 |
ThreadingTCPServer | socketserver多路复用版。UDPServerUnixStreamServerUnixDatagramServer的多路复用版前加Threading |
服务处理类BaseServer的方法 |
作用 |
fileno() |
返回服务器监听套接字的整数文件描述符。通常用来传递给select.select(), 以允许一个进程监视多个服务器。 |
handle_request() |
处理单个请求。处理顺序:get_request(), verify_request(), process_request()。 如果用户提供handle()方法抛出异常,将调用服务器的handle_error()方法。 如果self.timeout内没有请求收到, 将调用handle_timeout()并返回handle_request()。 |
serve_forever(poll_interval=0.5) | 处理请求,直到一个明确的shutdown()请求。每poll_interval秒轮询一次shutdown。忽略self.timeout。如果你需要做周期性的任务,建议放置在其他线程。 |
shutdown() | 告诉serve_forever()停止。for python2.6。 |
address_family | 地址簇。socket.AF_INET等 |
HandlerRequestClass | 用户提供的请求处理类,为每一个请求创建一个实例。 |
server_address | 侦听的服务器地址。 |
socketSocket | 服务器上侦听传入的请求socket对象的服务器。 |
下面方法可以被子类重载,它们对服务器对象的外部用户没有影响。 | |
finish_request() | 实际处理RequestHandlerClass发起的请求并调用其handle()方法。 常用。 |
get_request() | 接受socket请求,并返回二元组包含要用于与客户端通信的新socket对象,以及客户端的地址。 |
handle_error(request, client_address) | 如果RequestHandlerClass的handle()方法抛出异常时调用。默认操作是打印traceback到标准输出,并继续处理其他请求。 |
handle_timeout() | 超时处理。默认对于forking服务器是收集退出的子进程状态,threading服务器则什么都不做 |
process_request(request, client_address) | 调用finish_request()创建RequestHandlerClass的实例。如果需要,此功能可以创建新的进程或线程来处理请求,ForkingMixIn和ThreadingMixIn类做到这点。常用。 |
server_activate() | 通过服务器的构造函数来激活服务器。默认的行为只是监听服务器套接字。可重载。 |
server_bind() | 通过服务器的构造函数中调用绑定socket到所需的地址。可重载。 |
verify_request(request, client_address) | 返回一个布尔值,如果该值为True ,则该请求将被处理,反之请求将被拒绝。此功能可以重写来实现对服务器的访问控制。默认的实现始终返回True。client_address可以限定客户端,比如只处理指定ip区间的请求。 常用。 |
服务处理类的变量(属性): | 作用 |
allow_reuse_address | 是否允许地址重用,默认是False,可以在子类里更改。 |
request_queue_size | 请求队列的大小。如果单个请求需要很长的时间来处理,服务器忙时请求被放置到队列中,最多可以放request_queue_size个。一旦队列已满,来自客户端的请求将得到 “Connection denied”错误。默认值通常为5 ,但可以被子类覆盖。 |
socket_type | 服务器使用的套接字类型,socket.SOCK_STREAM和socket.SOCK_DGRAM等。 |
timeout | 超时时间。以秒为单位,或 None表示没有超时。如果handle_request()在timeout内没有收到请求,将调用handle_timeout()。 |
请求处理类的方法: |
作用 |
setup() | 处理请求之前的方法,可以初始化。 |
handler() | 处理请求的方法,处理与Client交互内容。 |
finish() | handler()处理完成后运行的方法。用于释放和清理。 |
以上是关于socketserver的主要内容,如果未能解决你的问题,请参考以下文章