SocketServer 模块是标准库中的一个高级模块,他的目的是为了简化很多样板代码,他是创建网络客户端和服务器所必需的代码,这个模块中有为你创建的各种各样的模块
类 |
描述 |
BaseServer |
包含核心服务器功能和mix-in类的钩子;仅用于推导,这样不会创建这个类的实例;可以使用TCPServer或UDPServer创建类的实例 |
TCPServer/UDPServer |
基础的网络同步TCP/UDP服务器 |
UnixStreamServer/UnixDatagramServer |
基于文件的基础同步TCP/UDP服务器 |
ForkingMixin/ThreadindMixin |
核心派出或线程功能;只用作mix-in类于一个服务器类配合实现一些异步性;不能直接实例化这个类 |
ForkingTCPServer/ForkingUDPServer |
ForkingMixin和TCPServer/UDPServer的组合 |
ThreadingTCPServer/ThreadingUDPServer |
ThreadingMixin和TCPServer/UDPServer的组合 |
BaseRequesthandler |
包含处理服务请求的核心功能;仅仅用于推导,无法创建这个类的实例; |
StreamRequestHandler/DatagramRequestHandler |
实现TCP/UDP服务器的服务处理器 |
除了为你隐藏了实现细节之外,另一个不同之处是,我们现在使用类来编写应用程序。因为以面向对象的方式处理事务有助于组织数据,以及逻辑性地将功能放在正确的地方。你还会注意到,应用程序现在是事件驱动的,这意味着只有在系统中的事件发生时,它们才会工作。
事件包括消息的发送和接收。事实上,你会看到类定义只包括一个用来接收客户端消息的事件处理程序。所有其他的功能都来自使用的SocketServer类。此外,GUI编程(见第5章)也是事件驱动的。你会立即注意到它们的相似性,因为最后一行代码通常是一个服务器的无限循环,它等待并响应客户端的服务请求。它工作起来几乎与本章前面的基础TCP服务器中的无限while循环一样。
在原始服务器循环中,我们阻塞等待请求,当接收到请求时就对其提供服务,然后继续等待。在此处的服务器循环中,并非在服务器中创建代码,而是定义一个处理程序,这样当服务器接收到一个传入的请求时,服务器就可以调用你的函数。