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() and server_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 |
+-----------+        +--------------------+