BaseSever:
提供基础的循环等待请求的处理框架。使用serve_forever启动服务,使用shutdown停止。同时提供了一些可自行扩展的方法,用于对不同类型的请求做自己想要的处理。
TCPServer:
在BaseServer基础上增加了一个TCP的socket连接,使用server_bind、server_activate、server_close处理TCP启停等操作
同时增加了get_request、shutdown_request、close_request处理客户端请求。
UDPServer:
在BaseServer基础上增加了一个UDP的socket连接,由于UDP不需要监听,因此只有get_request、shutdown_request、close_request等来处理客户端请求
ForkingMixIn:
提供了process_request方法,每一个请求开启一个新进程来处理
ThreadingMixIn:
提供了process_request方法,每一个请求开启一个新线程来处理
说明:
XXXMixIn专门提供process_request,用来覆盖XXXServer的默认的process_request。(MinIn类,可以看做一个设计模式?有点AOP的味道)
使用方法是,同时继承XXXMinIn和XXXServer,例如标准库的:
class
ThreadingTCPServer(ThreadingMixIn, TCPServer):
pass
一个细节:XXXMixIn一点要写在左侧,XXXServer要写在右侧,这样XXXMinIn里面的process_request方法才会覆盖XXXServer的process_request方法。
这个是由python的MRO决定的。
RequestHandlerClass
XXXServer在处理request时会调用RequestHandlerClass
self.RequestHandlerClass(request,
client_address,
self)
因此可以定义各种RequestHandlerClass,来实现对请求的处理。(组合。另一个设计模式?)