Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

66 lines (51 sloc) 5.045 kb
{% extends "base.html" %}
{% block body %}
<p><a href="http://www.tornadoweb.org/">Tornado</a> is an open source version of the scalable, non-blocking web server and tools that power <a href="http://friendfeed.com/">FriendFeed</a>. The FriendFeed application is written using a web framework that looks a bit like <a href="http://webpy.org/">web.py</a> or <a href="http://code.google.com/appengine/docs/python/tools/webapp/">Google's webapp</a>, but with additional tools and optimizations to take advantage of the underlying non-blocking infrastructure.</p>
<p>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 <a href="http://www.kernel.org/doc/man-pages/online/pages/man4/epoll.4.html">epoll</a>, 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 &mdash; 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 <a href="http://www.kegel.com/c10k.html">C10K problem</a>.)</p>
<p>See the <a href="/documentation">Tornado documentation</a> for a detailed walkthrough of the framework.</p>
<h2>Download and install</h2>
<p><b>Download:</b> <a href="http://github.com/downloads/facebook/tornado/tornado-1.1.tar.gz">tornado-1.1.tar.gz</a></p>
<pre><code>tar xvzf tornado-1.1.tar.gz
cd tornado-1.1
python setup.py build
sudo python setup.py install</code></pre>
<p>The Tornado source code is <a href="http://github.com/facebook/tornado">hosted on GitHub</a>. On Python 2.6+, it is also possible to simply add the tornado directory to your <code>PYTHONPATH</code> instead of building with <code>setup.py</code>, since the standard library includes <code>epoll</code> support.</p>
<h3>Prerequisites</h3>
<p>Tornado has been tested on Python 2.5 and 2.6. To use all of the features of Tornado, you need to have <a href="http://pycurl.sourceforge.net/">PycURL</a> and a JSON library like <a href="http://pypi.python.org/pypi/simplejson/">simplejson</a> installed. Complete installation instructions for Mac OS X and Ubuntu are included below for convenience.</p>
<p style="font-weight:bold">Mac OS X 10.6 (Python 2.6)</p>
<pre><code>sudo easy_install setuptools pycurl</code></pre>
<p style="font-weight:bold">Mac OS X 10.5 (Python 2.5)</p>
<pre><code>sudo easy_install setuptools pycurl==7.16.2.1 simplejson</code></pre>
<p style="font-weight:bold">Ubuntu Linux (Python 2.6)</p>
<pre><code>sudo apt-get install python-pycurl</code></pre>
<p style="font-weight:bold">Ubuntu Linux (Python 2.5)</p>
<pre><code>sudo apt-get install python-dev python-pycurl python-simplejson</code></pre>
<h2>Hello, world</h2>
<p>Here is the canonical &quot;Hello, world&quot; example app for Tornado:</p>
<pre><code>import tornado.httpserver
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__":
http_server = tornado.httpserver.HTTPServer(application)
http_server.listen(8888)
tornado.ioloop.IOLoop.instance().start()</code></pre>
<p>See the <a href="/documentation">Tornado documentation</a> for a detailed walkthrough of the framework.</p>
<h2>Discussion and support</h2>
<p>You can discuss Tornado and report bugs on <a href="http://groups.google.com/group/python-tornado">the Tornado developer mailing list</a>.
<h2>Links and resources</h2>
<ul>
<li><a href="http://tornado.poweredsites.org">tornado.poweredsites.org</a> - listing of sites using Tornado</li>
<li><a href="http://github.com/szabotshark/t3">T3</a> - Tornado ported to Python 3</li>
<li><a href="http://github.com/fiorix/cyclone">Cyclone</a> - Tornado ported to the Twisted event loop</li>
<li><a href="http://github.com/bdarnell/tornado_tracing">Tornado Tracing</a> - Performance tracing library for Tornado</li>
</ul>
<h2>Updates</h2>
<p>Follow us on <a href="http://www.facebook.com/pages/Tornado-Web-Server/144144048921">Facebook</a>, <a href="http://twitter.com/tornadoweb">Twitter</a>, or <a href="http://friendfeed.com/tornado-web">FriendFeed</a> to get updates and announcements:</p>
<div style="margin-top:1em"><a href="http://www.facebook.com/pages/Tornado-Web-Server/144144048921" style="margin-right:10px"><img src="/static/facebook.png" style="width:64px;height:64px" alt="Facebook"/></a><a href="http://twitter.com/tornadoweb" style="margin-right:10px"><img src="/static/twitter.png" style="width:64px;height:64px" alt="Twitter"/></a><a href="http://friendfeed.com/tornado-web" style="margin-right:10px"><img src="/static/friendfeed.png" style="width:64px;height:64px" alt="Facebook"/></a></div>
{% end %}
Jump to Line
Something went wrong with that request. Please try again.