返回介绍

1.1 Tornado 是什么?

发布于 2025-03-08 19:24:48 字数 2552 浏览 0 评论 0 收藏 0

Tornado 是使用 Python 编写的一个强大的、可扩展的 Web 服务器。它在处理严峻的网络流量时表现得足够强健,但却在创建和编写时有着足够的轻量级,并能够被用在大量的应用和工具中。

我们现在所知道的 Tornado 是基于 Bret Taylor 和其他人员为 FriendFeed 所开发的网络服务框架,当 FriendFeed 被 Facebook 收购后得以开源。不同于那些最多只能达到 10,000 个并发连接的传统网络服务器,Tornado 在设计之初就考虑到了性能因素,旨在解决 C10K 问题,这样的设计使得其成为一个拥有非常高性能的框架。此外,它还拥有处理安全性、用户验证、社交网络以及与外部服务(如数据库和网站 API)进行异步交互的工具。

延伸阅读:C10K 问题

基于线程的服务器,如 Apache,为了传入的连接,维护了一个操作系统的线程池。Apache 会为每个 HTTP 连接分配线程池中的一个线程,如果所有的线程都处于被占用的状态并且尚有内存可用时,则生成一个新的线程。尽管不同的操作系统会有不同的设置,大多数 Linux 发布版中都是默认线程堆大小为 8MB。Apache 的架构在大负载下变得不可预测,为每个打开的连接维护一个大的线程池等待数据极易迅速耗光服务器的内存资源。

大多数社交网络应用都会展示实时更新来提醒新消息、状态变化以及用户通知,这就要求客户端需要保持一个打开的连接来等待服务器端的任何响应。这些长连接或推送请求使得 Apache 的最大线程池迅速饱和。一旦线程池的资源耗尽,服务器将不能再响应新的请求。

异步服务器在这一场景中的应用相对较新,但他们正是被设计用来减轻基于线程的服务器的限制的。当负载增加时,诸如 Node.js,lighttpd 和 Tornodo 这样的服务器使用协作的多任务的方式进行优雅的扩展。也就是说,如果当前请求正在等待来自其他资源的数据(比如数据库查询或 HTTP 请求)时,一个异步服务器可以明确地控制以挂起请求。异步服务器用来恢复暂停的操作的一个常见模式是当合适的数据准备好时调用回调函数。我们将会在第五章讲解回调函数模式以及一系列 Tornado 异步功能的应用。

自从 2009 年 9 月 10 日发布以来,TornadoTornado 已经获得了很多社区的支持,并且在一系列不同的场合得到应用。除 FriendFeed 和 Facebook 外,还有很多公司在生产上转向 Tornado,包括 Quora、Turntable.fm、Bit.ly、Hipmunk 以及 MyYearbook 等。

总之,如果你在寻找你那庞大的 CMS 或一体化开发框架的替代品,Tornado 可能并不是一个好的选择。Tornado 并不需要你拥有庞大的模型建立特殊的方式,或以某种确定的形式处理表单,或其他类似的事情。它所做的是让你能够快速简单地编写高速的 Web 应用。如果你想编写一个可扩展的社交应用、实时分析引擎,或 RESTful API,那么简单而强大的 Python,以及 Tornado(和这本书)正是为你准备的!

1.1.1 Tornado 入门

在大部分*nix 系统中安装 Tornado 非常容易--你既可以从 PyPI 获取(并使用 easy_installpip 安装),也可以从 Github 上下载源码编译安装,如下所示[1]:

$ curl -L -O https://github.com/facebook/tornado/archive/v3.1.0.tar.gz
$ tar xvzf v3.1.0.tar.gz
$ cd tornado-3.1.0
$ python setup.py build
$ sudo python setup.py install

Tornado 官方并不支持 Windows,但你可以通过 ActivePython 的 PyPM 包管理器进行安装,类似如下所示:

C:\> pypm install tornado

一旦 Tornado 在你的机器上安装好,你就可以很好的开始了!压缩包中包含很多 demo,比如建立博客、整合 Facebook、运行聊天服务等的示例代码。我们稍后会在本书中通过一些示例应用逐步讲解,不过你也应该看看这些官方 demo。

本书中的代码假定你使用的是基于 Unix 的系统,并且使用的是 Python2.6 或 2.7 版本。如果是这样,你就不需要任何除了 Python 标准库之外的东西。如果你的 Python 版本是 2.5 或更低,在安装 pycURL、simpleJSON 和 Python 开发头文件后可以运行 Tornado。[2]

1.1.2 社区和支持

对于问题、示例和一般的指南,Tornado 官方文档是个不错的选择。在 tornadoweb.org 上有大量的例子和功能缺陷,更多细节和变更可以在 Tornado 在 Github 上的版本库 中看到。而对于更具体的问题,可以到 Tornado 的 Google Group 中咨询,那里有很多活跃的日常使用 Tornado 的开发者。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文