.. title:: Tornado Web Server
|Tornado Web Server|
====================
.. |Tornado Web Server| image:: tornado.png
:alt: Tornado Web Server
`Tornado `_ is an open source version of
the scalable, non-blocking web server and tools that power `FriendFeed
`_. The FriendFeed application is written
using a web framework that looks a bit like `web.py
`_ or `Google's webapp
`_, but
with additional tools and optimizations to take advantage of the
underlying non-blocking infrastructure.
The framework is distinct from most mainstream web server frameworks
(and certainly most Python frameworks) because it is non-blocking and
reasonably fast. Because it is non-blocking and uses `epoll
`_
or ``kqueue``, it can handle thousands of simultaneous standing
connections, which means it is ideal for real-time web services. We
built the web server specifically to handle FriendFeed's real-time
features — every active user of FriendFeed maintains an open
connection to the FriendFeed servers. (For more information on scaling
servers to support thousands of clients, see The `C10K problem
`_.)
Upgrading from Tornado 1.x
--------------------------
Tornado 2.0 introduces several potentially backwards-incompatible
changes, including in particular automatic escaping of template
output. Users who are upgrading from Tornado 1.x should see the
`version 2.0 release notes `_ for
information about backwards compatibility.
Quick links
-----------
* `Documentation `_
* |Download current version|: :current_tarball:`z` (`release notes `_)
* `Source (github) `_
* `Mailing list `_
* `Wiki `_
.. |Download current version| replace:: Download version |version|
Hello, world
------------
Here is the canonical "Hello, world" example app for Tornado::
import tornado.ioloop
import tornado.web
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
application = tornado.web.Application([
(r"/", MainHandler),
])
if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
See the `Tornado documentation `_ for a
detailed walkthrough of the framework.
Installation
------------
**Automatic installation:** Tornado is listed in `PyPI
`_ and can be installed with
``pip`` or ``easy_install``. Note that the source distribution
includes demo applications that are not present when Tornado is
installed in this way, so you may wish to download a copy of the
source tarball as well.
**Manual installation:** Download :current_tarball:`z`:
.. parsed-literal::
tar xvzf tornado-|version|.tar.gz
cd tornado-|version|
python setup.py build
sudo python setup.py install
The Tornado source code is `hosted on GitHub
`_. On Python 2.6 and 2.7, it is
also possible to simply add the tornado directory to your
``PYTHONPATH`` instead of building with ``setup.py``, since the
standard library includes ``epoll`` support.
**Prerequisites:** Tornado runs on Python 2.5, 2.6, 2.7 and 3.2.
* On Python 2.6 and 2.7, there are no dependencies outside the Python
standard library, although `PycURL
`_ (version 7.18.2 or higher
required; version 7.21.1 or higher recommended) may be used if
desired.
* On Python 2.5, PycURL is required, along with `simplejson
`_ and the Python
development headers (typically obtained by installing a package
named something like ``python-dev`` from your operating system).
* On Python 3.2, the `distribute
`_ package is required.
Note that Python 3 support is relatively new and may have bugs.
**Platforms:** Tornado should run on any Unix-like platform, although
for the best performance and scalability only Linux and BSD (including
BSD derivatives like Mac OS X) are recommended.
Discussion and support
----------------------
You can discuss Tornado and report bugs on `the Tornado developer
mailing list `_. Links
to additional resources can be found on the `Tornado wiki
`_.
Tornado is one of `Facebook's open source technologies
`_. It is available under
the `Apache License, Version 2.0
`_.
This web site and all documentation is licensed under `Creative
Commons 3.0 `_.
.. toctree::
:hidden:
documentation