16.6 相关模块

表16.4列出了其他与网络和套接字相关的Python模块。select模块通常在底层套接字程序中与socket模块联合使用。它提供的select()函数可以同时管理多个套接字对象。它最有用的功能就是同时监听多个套接字的连接。select()函数会阻塞,直到有至少一个套接字准备好要进行通讯的时候才退出。它提供了哪些套接字已经准备好可以开始读取的集合(它也能决定了哪些套接字已经准备好可以开始写的集合,不过这个功能相对来说不大常用)。

16.6 相关模块 - 图1

async*和SocketServer模块在创建服务器方面都提供了高层次的功能。由于是基于socket和(或)select模块,封装了所有的底层的代码,它们使你可以快速开发客户端/服务器的系统。你所需要做的只是从适当的基类中派生出一个新的类。所有的东西就已经就绪了。就像之前所说的,SocketServer甚至提供了把线程或进程集成到服务器中的功能,以实现更好的对客户端请求的并行处理能力。

虽然async*是标准库提供的唯一的异步开发支持库,我们也可选择如Twisted这样相对于标准库更现代、更强大的第三方库。虽然这里看到的例子代码比之前的什么都自己处理的代码稍微长那么一点,Twisted提供了更为强大、更具弹性的框架。它已经实现了很多协议。你可以在下面的网站找到更多有关Twisted的信息:

16.6 相关模块 - 图2

本章所讨论的主题涵盖了在Python中用socket网络编程和如何用低级别的协议如TCP/IP和UDP/IP来创建应用程序。如果你想要开发高层次的网页和因特网应用程序,强烈建议你阅读第17章和第20章。