本节书摘来自异步社区《Python核心编程(第3版)》一书中的第2章,第2.7节,作者[美] Wesley Chun(卫斯理 春),孙波翔 李斌 李晗 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。
2.7 相关模块
表2-4列出了其他一些与网络和套接字编程有关的Python模块。当开发低级套接字程序时,经常配合使用select模块和socket模块。select模块提供了select()函数,该函数管理套接字对象集合。它所做的最有用的一个事情就是接收一套套接字,并监听它们活动的连接。select()函数将会阻塞,直到至少有一个套接字已经为通信做好准备,而当其发生时,它将提供一组准备好读信息的集合(它还可以确定哪些套接字准备好写入,虽然它不像前一种操作那么常见)。
![fe4786af5e7b2ff5dd9de0312d1a497ce6396a38](https://i-blog.csdnimg.cn/blog_migrate/a0f437a97d3f4884e984c0f6c93b0ad9.png)
在创建服务器方面,async*和SocketServer模块都提供更高级的功能。它们以socket和/或select模块为基础编写,能够使客户端/服务器系统开发更加迅速,因为它们已经自动处理了所有的底层代码。你需要做的所有工作就是以自己的方式创建或继承适当的基类。正如前面所提到的,SocketServer甚至提供了将线程或新进程集成到服务器的功能,它提供了一个更像并行处理的客户端请求的流程。
虽然在标准库中async*提供了唯一的异步开发支持,但是在前一节中,我们引入了一个比旧版本更加强大的第三方包Twisted。虽然本章中我们已经看到的示例代码稍长于粗糙的脚本,但是Twisted提供了一个更加强大和灵活的框架,并且已经实现了很多协议。可以在http://twistedmatrix.com 网站上找到更多关于Twisted的消息。
Concurrence是一个更现代化的网络框架,它是荷兰社交网络Hyves的后台引擎。Concurrence是一个搭配了libevent的高性能I/O系统,libevent是一个低级事件回调调度系统。Concurrence是一个异步模型,它使用轻量级线程(执行回调)以事件驱动的方式进行线程间通信和消息传递工作。可以在http://opensource.hyves.org/concurrence 网址找到更多关于Concurrence的信息。
现代网络框架遵循众多异步模型(greenlet、generator等)之一来提供高性能异步服务器。这些框架的其中一个目标就是推动异步编程的复杂性,以允许用户以一种更熟悉的同步方式进行编码。
本章介绍的主题主要是在Python中利用套接字进行网络编程,以及如何使用低层协议套件(如TCP/IP和UDP/IP)创建自定义应用程序。如果你想开发高级Web和网络应用程序,我们强烈鼓励你阅读第3章,或者跳到本书第2部分。