ThinkSSL🔒 一键申购 5分钟快速签发 30天无理由退款 购买更放心 广告
## 1. reactor ![](https://box.kancloud.cn/f6868ac5d3d1c82bb41cb49736b46e49_300x366.png) > * 这个循环就是个”reactor“(反应堆),因为它等待事件的发生然对其作为相应的反应。正因为如此,它也被称作事件循环。由于交互式系统都要进行I/O操作,因此这种循环也有时被称作select loop,这是由于select调用被用来等待I/O操作。因此,在本程序中的select循环中,一个事件的发生意味着一个socket端处有数据来到。值得注意的是,select并不是唯一的等待I/O操作的函数,它仅仅是一个比较古老的函数而已(因此才被用的如此广泛)。现在有一些新API可以完成select的工作而且性能更优,它们已经在不同的系统上实现了。不考虑性能上的因素,它们都完成同样的工作:监视一系列sockets(文件描述符)并阻塞程序,直到至少有一个准备好时行I/O操作。 > * 严格意义上来说,我们的异步模式客户端中的循环并不是reactor模式,因为这个循环体并没有独立于业务处理(在此是接收具体个服务器传送来的诗歌)之外。它们被混合在一起。一个真正reactor模式的实现是需要实现循环独立抽象出来并具有如下的功能: > 1.监视一系列与你I/O操作相关的文件描述符(description) > 2.不停地向你汇报那些准备好I/O操作的文件描述符 一个设计优秀的reactor模式实现需要做到: 1. 处理所有不同系统会出现的I/O事件 2. 提供优雅的抽象来帮助你在使用reactor时少花些心思去考虑它的存在 3. 提供你可以在抽象层外(treactor实现)使用的公共协议实现。 好了,我们上面所说的其实就是Twisted—健壮、跨平台实现了reactor模式并含有很多附加功能。