### Navigation
- [index](# "General Index")
- [modules](# "Python Module Index") |
- [next](# "Asynchronous and non-Blocking I/O") |
- [previous](# "User鈥檚 guide") |
- [Tornado 4.4.dev1 documentation](#) »
- [User's guide](#) »
# Introduction
[Tornado](http://www.tornadoweb.org) [http://www.tornadoweb.org] is a Python web framework andasynchronous networking library, originally developed at [FriendFeed](http://friendfeed.com) [http://friendfeed.com]. By using non-blocking network I/O, Tornadocan scale to tens of thousands of open connections, making it ideal for[long polling](http://en.wikipedia.org/wiki/Push_technology#Long_polling) [http://en.wikipedia.org/wiki/Push_technology#Long_polling],[WebSockets](http://en.wikipedia.org/wiki/WebSocket) [http://en.wikipedia.org/wiki/WebSocket], and otherapplications that require a long-lived connection to each user.
Tornado can be roughly divided into four major components:
- A web framework (including [`RequestHandler`](# "tornado.web.RequestHandler") which is subclassed tocreate web applications, and various supporting classes).
- Client- and server-side implementions of HTTP ([`HTTPServer`](# "tornado.httpserver.HTTPServer") and[`AsyncHTTPClient`](# "tornado.httpclient.AsyncHTTPClient")).
- An asynchronous networking library including the classes [`IOLoop`](# "tornado.ioloop.IOLoop")and [`IOStream`](# "tornado.iostream.IOStream"), which serve as the building blocks for the HTTPcomponents and can also be used to implement other protocols.
- A coroutine library ([`tornado.gen`](# "tornado.gen")) which allows asynchronouscode to be written in a more straightforward way than chainingcallbacks.
The Tornado web framework and HTTP server together offer a full-stackalternative to [WSGI](http://www.python.org/dev/peps/pep-3333/) [http://www.python.org/dev/peps/pep-3333/].While it is possible to use the Tornado web framework in a WSGIcontainer ([`WSGIAdapter`](# "tornado.wsgi.WSGIAdapter")), or use the Tornado HTTP server as acontainer for other WSGI frameworks ([`WSGIContainer`](# "tornado.wsgi.WSGIContainer")), each of thesecombinations has limitations and to take full advantage of Tornado youwill need to use the Tornado's web framework and HTTP server together.
© Copyright 2009-2016, The Tornado Authors. Created using [Sphinx](http://sphinx-doc.org/) 1.3.5.
- User's guide
- Introduction
- Asynchronous and non-Blocking I/O
- Coroutines
- Queue example - a concurrent web spider
- Structure of a Tornado web application
- Templates and UI
- Authentication and security
- Running and deploying
- Web framework
- tornado.web — RequestHandler and Application classes
- tornado.template — Flexible output generation
- tornado.escape — Escaping and string manipulation
- tornado.locale — Internationalization support
- tornado.websocket — Bidirectional communication to the browser
- HTTP servers and clients
- tornado.httpserver — Non-blocking HTTP server
- tornado.httpclient — Asynchronous HTTP client
- tornado.httputil — Manipulate HTTP headers and URLs
- tornado.http1connection – HTTP/1.x client/server implementation
- Asynchronous networking
- tornado.ioloop — Main event loop
- tornado.iostream — Convenient wrappers for non-blocking sockets
- tornado.netutil — Miscellaneous network utilities
- tornado.tcpclient — IOStream connection factory
- tornado.tcpserver — Basic IOStream-based TCP server
- Coroutines and concurrency
- tornado.gen — Simplify asynchronous code
- tornado.concurrent — Work with threads and futures
- tornado.locks – Synchronization primitives
- tornado.queues – Queues for coroutines
- tornado.process — Utilities for multiple processes
- Integration with other services
- tornado.auth — Third-party login with OpenID and OAuth
- tornado.wsgi — Interoperability with other Python frameworks and servers
- tornado.platform.asyncio — Bridge between asyncio and Tornado
- tornado.platform.caresresolver — Asynchronous DNS Resolver using C-Ares
- tornado.platform.twisted — Bridges between Twisted and Tornado
- Utilities
- tornado.autoreload — Automatically detect code changes in development
- tornado.log — Logging support
- tornado.options — Command-line parsing
- tornado.stack_context — Exception handling across asynchronous callbacks
- tornado.testing — Unit testing support for asynchronous code
- tornado.util — General-purpose utilities
- Frequently Asked Questions
- Release notes
- What's new in Tornado 4.3
- What's new in Tornado 4.2.1
- What's new in Tornado 4.2
- What's new in Tornado 4.1
- What's new in Tornado 4.0.2
- What's new in Tornado 4.0.1
- What's new in Tornado 4.0
- What's new in Tornado 3.2.2
- What's new in Tornado 3.2.1
- What's new in Tornado 3.2
- What's new in Tornado 3.1.1
- What's new in Tornado 3.1
- What's new in Tornado 3.0.2
- What's new in Tornado 3.0.1
- What's new in Tornado 3.0
- What's new in Tornado 2.4.1
- What's new in Tornado 2.4
- What's new in Tornado 2.3
- What's new in Tornado 2.2.1
- What's new in Tornado 2.2
- What's new in Tornado 2.1.1
- What's new in Tornado 2.1
- What's new in Tornado 2.0
- What's new in Tornado 1.2.1
- What's new in Tornado 1.2
- What's new in Tornado 1.1.1
- What's new in Tornado 1.1
- What's new in Tornado 1.0.1
- What's new in Tornado 1.0