Версия 20 от 2010-06-16 13:54:22

Убрать это сообщение

Документация к веб серверу Tornado

http://www.tornadoweb.org/static/tornado.png

Tornado - открытая версия масштабируемого, неблокирующего сервера и инструментов, которые используются сервисом FriendFeed. Приложение FriendFeed написано с использованием фреймворка, который выглядит как web.py или веб приложение Google, но имеет ряд дополнительных инструментов и оптимизаций с целью получения всех выгод от низлежащей неблокирующей инфраструктуры.

Обзор

Веб сервер, который обслуживает сервис FriendFeed относительно простой, неблокирующий веб сервер, написанный на языке Python. Приложение FriendFeed написано с использованием веб фреймворка 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 non-blocking web server and tools.

Tornado - открытая версия масштабируемого, неблокирующего сервера и инструментов, которые используются сервисом FriendFeed. Данный фреймворк отличается от большинства мейнстримовских (и, определенно, большинства Python фреймворков), потому что использование неблокирующего принципа дает достаточную быстроту. Благодаря этому, а также благодаря использованию epoll, он может обрабатывать тысячи одновременных соединений, что значит, этот фреймворк идеален для создания веб сервисов реального времени. Мы построили веб сервер специфиWe built the web server конкретно для того, чтобы обрабатывать функции сервиса FriendFeed в реальном времени — каждый активный пользователь сервися поддерживает открытое соединение с серверами. (Для получения дополнительной информации о масштабировании серверов для поддержки тисяч клиентов, прочитайте о проблеме C10K.)

Загрузка

Загрузите последнюю версию Tornado с GitHub:

На GitHub Вы также можете просмореть исходники. Чтобы установить Tornado:

   1 tar xvzf tornado-0.2.tar.gz
   2 cd tornado-0.2
   3 python setup.py build
   4 sudo python setup.py install

После установки, вы получите возможность запустить любое из демонстрационных приложений из папки demos, которые включены в пакет Tornado.

   1 ./demos/helloworld/helloworld.py

Подготовка

Tornado тестировался на Python 2.5 и 2.6. Для того, чтобы использовать все функции Tornado, вам нужны библиотеки !PycURL !JSON, например simplejson. Полные инструкции по установке на Mac OS X и Ubuntu показаны ниже.

Mac OS X 10.5/10.6

   1 sudo easy_install setuptools pycurl==7.16.2.1 simplejson

Ubuntu Linux

   1 sudo apt-get install python-dev python-pycurl python-simplejson

Список модулей

Наиболее важный модуль - web, который является фреймворком, включающим в себя большую часть функционала пакета Tornado. Другие модули - это инструменты, которые делают модуль web богаче. Смотрите Руководство по Tornado ниже для более полной информации о пакете web.

Основные модули

Низкоуровневые модули

Другие модули

Руководство

Обработчики и параметры запросов

A Tornado web application maps URLs or URL patterns to subclasses of tornado.web.RequestHandler. Those classes define get() or post() methods to handle HTTP GET or POST requests to that URL.

This code maps the root URL / to MainHandler and the URL pattern /story/([0-9]+) to StoryHandler. Regular expression groups are passed as arguments to the RequestHandler methods:

   1 class MainHandler(tornado.web.RequestHandler):
   2     def get(self):
   3         self.write("You requested the main page")
   4 
   5 class StoryHandler(tornado.web.RequestHandler):
   6     def get(self, story_id):
   7         self.write("You requested the story " + story_id)
   8 
   9 application = tornado.web.Application([
  10     (r"/", MainHandler),
  11     (r"/story/([0-9]+)", StoryHandler),
  12 ])

You can get query string arguments and parse POST bodies with the get_argument() method:

   1 class MainHandler(tornado.web.RequestHandler):
   2     def get(self):
   3         self.write('<html><body><form action="/" method="post">'
   4                    '<input type="text" name="message">'
   5                    '<input type="submit" value="Submit">'
   6                    '</form></body></html>')
   7 
   8     def post(self):
   9         self.set_header("Content-Type", "text/plain")
  10         self.write("You wrote " + self.get_argument("message"))

If you want to send an error response to the client, e.g., 403 Unauthorized, you can just raise a tornado.web.HTTPError exception:

   1 if not self.user_is_logged_in():
   2     raise tornado.web.HTTPError(403)

The request handler can access the object representing the current request with self.request. The HTTPRequest object includes a number of useful attribute, including:

See the class definition for HTTPRequest in httpserver for a complete list of attributes.

Шаблоны

Cookies и защищенные cookies

Аутентификация пользователей

Защита от CSRF

Статические файлы и агрессивное кеширование файлов

Локализация

Модули пользовательского интерфейса

Неблокирующие, асинхронные запросы

Аутентификация от третих разработчиков

Производительность

Запуск Tornado на производстве

WSGI и Google AppEngine

Предостережения и поддержка

Перевод: Ростислав Дзинько