socketserver
— 网络服务器框架
¶
源代码: Lib/socketserver.py
The
socketserver
模块简化编写网络服务器的任务。
可用性 :非 WASI。
This module does not work or is not available on WebAssembly. See WebAssembly 平台 了解更多信息。
有 4 个基本具体服务器类:
- class socketserver. TCPServer ( server_address , RequestHandlerClass , bind_and_activate = True ) ¶
-
这使用 Internet TCP 协议,在客户端和服务器之间提供连续数据流。若 bind_and_activate 为 True,构造函数自动试图援引
server_bind()andserver_activate()。其它参数被传递给BaseServer基类。
- class socketserver. UDPServer ( server_address , RequestHandlerClass , bind_and_activate = True ) ¶
-
这使用是离散信息数据包 (可能乱序到达或在传输过程中丢失) 的数据报。参数如同
TCPServer.
- class socketserver. UnixStreamServer ( server_address , RequestHandlerClass , bind_and_activate = True ) ¶
- class socketserver. UnixDatagramServer ( server_address , RequestHandlerClass , bind_and_activate = True ) ¶
-
这些不常用类类似于 TCP 和 UDP 类,但使用 Unix 域套接字;它们不可用于非 Unix 平台。参数如同
TCPServer.
这 4 个类处理请求
同步
;每个请求必须在下一个请求启动之前完成。这不合适若每个请求花很长时间才完成,因为它要求大量计算,或者因为它返回客户端处理缓慢的大量数据。解决方案是创建单独进程 (或线程) 以处理每个请求;
ForkingMixIn
and
ThreadingMixIn
混合类可以用于支持异步行为。
创建服务器要求几个步骤。首先,必须创建请求处理程序类通过子类化
BaseRequestHandler
类并覆写其
handle()
方法;此方法将处理传入请求。其次,必须实例化一个服务器类,将服务器地址和请求处理程序类传递给它。推荐使用服务器在
with
语句。然后调用
handle_request()
or
serve_forever()
方法在服务器对象以处理一个或多个请求。最后,调用
server_close()
以关闭套接字 (除非使用
with
语句)。
当继承自
ThreadingMixIn
为线程化连接行为,应明确声明想要线程在突然关闭时的行为如何。
ThreadingMixIn
类定义属性
daemon_threads
指示服务器是否应该等待线程终止。应明确设置标志,若愿意让线程行为自主;默认为
False
,意味着 Python 不会退出,直到创建所有线程通过
ThreadingMixIn
的退出。
服务器类拥有相同的外部方法和属性,无论它们使用什么网络协议。
服务器创建注意事项 ¶
在继承简图中有 5 个类,其中 4 个表示 4 种类型的同步服务器:
+------------+ | BaseServer | +------------+ | v +-----------+ +------------------+ | TCPServer |------->| UnixStreamServer | +-----------+ +------------------+ | v +-----------+ +--------------------+ | UDPServer |------->| UnixDatagramServer | +-----------+ +--------------------+