Python SocketServer源码分析

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,来实现对请求的处理。(组合。另一个设计模式?)

Python SocketServer源码分析,布布扣,bubuko.com

Python SocketServer源码分析

上一篇:【转】C++文件读写详解(ofstream,ifstream,fstream)


下一篇:005 Python的数值类型