352
Комментарий:
|
11251
|
Удаления помечены так. | Добавления помечены так. |
Строка 1: | Строка 1: |
= Веб сервер Tornado = | = Документация к веб серверу Tornado = |
Строка 5: | Строка 5: |
== Содержание == | [[http://www.tornadoweb.org|Tornado]] - открытая версия масштабируемого, неблокирующего сервера и инструментов, которые используются сервисом [[http://friendfeed.com|FriendFeed]]. Приложение [[http://friendfeed.com|FriendFeed]] написано с использованием фреймворка, который выглядит как web.py или веб приложение Google, но имеет ряд дополнительных инструментов и оптимизаций с целью получения всех выгод от низлежащей неблокирующей инфраструктуры. |
Строка 7: | Строка 7: |
1. [[Документации/Tornado-web/Обзор|Обзор]] 1. [[Документации/Tornado-web/Загрузка|Загрузка]] 2. [[Документации/Tornado-web/Подготовка|Подготовка]] |
<<TableOfContents()>> = Обзор = Веб сервер, который обслуживает сервис [[http://friendfeed.com|FriendFeed]] относительно простой, неблокирующий веб сервер, написанный на языке Python. Приложение [[http://friendfeed.com|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. [[http://www.tornadoweb.org|Tornado]] - открытая версия масштабируемого, неблокирующего сервера и инструментов, которые используются сервисом [[http://friendfeed.com|FriendFeed]]. Данный фреймворк отличается от большинства мейнстримовских (и, определенно, большинства Python фреймворков), потому что использование неблокирующего принципа дает достаточную быстроту. Благодаря этому, а также благодаря использованию [[http://www.kernel.org/doc/man-pages/online/pages/man4/epoll.4.html|epoll]], он может обрабатывать тысячи одновременных соединений, что значит, этот фреймворк идеален для создания веб сервисов реального времени. Мы построили веб сервер специфиWe built the web server конкретно для того, чтобы обрабатывать функции сервиса [[http://friendfeed.com|FriendFeed]] в реальном времени — каждый активный пользователь сервися поддерживает открытое соединение с серверами. (Для получения дополнительной информации о масштабировании серверов для поддержки тисяч клиентов, прочитайте о [[http://www.kegel.com/c10k.html|проблеме C10K]].) = Загрузка = Загрузите последнюю версию Tornado с !GitHub: [[http://www.tornadoweb.org/static/tornado-0.2.tar.gz|tornado-0.2.tar.gz]] На !GitHub Вы также можете просмореть исходники. Чтобы установить Tornado: {{{#!highlight bash tar xvzf tornado-0.2.tar.gz cd tornado-0.2 python setup.py build sudo python setup.py install }}} После установки, вы получите возможность запустить любое из демонстрационных приложений из папки ''demos'', которые включены в пакет Tornado. {{{#!highlight bash ./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''' {{{#!highlight bash sudo easy_install setuptools pycurl==7.16.2.1 simplejson }}} '''Ubuntu Linux''' {{{#!highlight bash sudo apt-get install python-dev python-pycurl python-simplejson }}} = Список модулей = Наиболее важный модуль - ''web'', который является фреймворком, включающим в себя большую часть функционала пакета Tornado. Другие модули - это инструменты, которые делают модуль ''web'' богаче. Смотрите [[#Руководство|Руководство по Tornado]] ниже для более полной информации о пакете ''web''. == Основные модули == * [[http://github.com/facebook/tornado/blob/master/tornado/web.py|web]] - веб фреймворк, на котором построен !FriendFeed. '''web''' содержит большинство важных функций Tornado * [[http://github.com/facebook/tornado/blob/master/tornado/escape.py|escape]] - методы кодирование/декодирование XHTML, JSON и URL * [[http://github.com/facebook/tornado/blob/master/tornado/database.py|database]] - Простая обертка вокруг !MySQLdb для упрощения спользования СУБД MySQL * [[http://github.com/facebook/tornado/blob/master/tornado/template.py|template]] - язык шаблонов, в основе которого находится язык Python * [[http://github.com/facebook/tornado/blob/master/tornado/httpclient.py|httpclient]] - неблокирующий HTTP клиент созданный для работы с модулями '''web''' и '''httpserver''' * [[http://github.com/facebook/tornado/blob/master/tornado/auth.py|auth]] - реализация схем аутентификации и авторизации от третих разработчиков (Google OpenID/OAuth, Facebook Platform, Yahoo BBAuth, !FriendFeed OpenID/OAuth, Twitter OAuth) * [[http://github.com/facebook/tornado/blob/master/tornado/locale.py|locale]] - поддержка локализации/интернационализации * [[http://github.com/facebook/tornado/blob/master/tornado/options.py|options]] - синтаксический анализатор файлов настроек и аргументов коммандной строки, оптимизированный для использования в среде сервера == Низкоуровневые модули == * [[http://github.com/facebook/tornado/blob/master/tornado/httpserver.py|httpserver]] - очень простой HTTP сервер, на основе которого построен модуль '''web''' * [[http://github.com/facebook/tornado/blob/master/tornado/iostream.py|iostream]] - простая обертка вокруг неблокирующих сокетов для обеспечения общих шаблонов считывания и записи * [[http://github.com/facebook/tornado/blob/master/tornado/ioloop.py|ioloop]] - основная петля ввода/вывода == Другие модули == * [[http://github.com/facebook/tornado/blob/master/tornado/s3server.py|s3server]] - веб сервер, который реализует большую часть интерфейса Amazon S3, с локальным файловым хранилищем данных = Руководство = == Обработчики и параметры запросов == Веб Приложение Tornado отображает (maps) URL или шаблоны URL в подклассы '''tornado.web.!RequestHandler'''. Эти классы определяют '''get()''' и '''post()''' методы для обработки запросов HTTP GET и POST по этому URL. Этот код отображает корневой URL '''/''' в '''!MainHandler''', а шаблон URL '''/story/([0-9]+)''' в '''!StoryHandler'''. Регулярные выражения передаются в качестве аргументов методам класс '''!RequestHandler''': {{{#!highlight python class MainHandler(tornado.web.RequestHandler): def get(self): self.write("You requested the main page") class StoryHandler(tornado.web.RequestHandler): def get(self, story_id): self.write("You requested the story " + story_id) application = tornado.web.Application([ (r"/", MainHandler), (r"/story/([0-9]+)", StoryHandler), ]) }}} С помощью метода get_argument() вы можете получить аргументы строки запроса и распарсить тело POST запроса: {{{#!highlight python class MainHandler(tornado.web.RequestHandler): def get(self): self.write('<html><body><form action="/" method="post">' '<input type="text" name="message">' '<input type="submit" value="Submit">' '</form></body></html>') def post(self): self.set_header("Content-Type", "text/plain") self.write("You wrote " + self.get_argument("message")) }}} Если вы хотите отправить сообщение об ошибке клиенту, например, 403 Unauthorized, вам достаточно вызвать исключение '''tornado.web.HTTPError''': {{{#!highlight python if not self.user_is_logged_in(): 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: * arguments - all of the GET and POST arguments * files - all of the uploaded files (via multipart/form-data POST requests) * path - the request path (everything before the ?) * headers - the request headers See the class definition for HTTPRequest in httpserver for a complete list of attributes. == Шаблоны == == Cookies и защищенные cookies == == Аутентификация пользователей == == Защита от CSRF == == Статические файлы и агрессивное кеширование файлов == == Локализация == == Модули пользовательского интерфейса == == Неблокирующие, асинхронные запросы == == Аутентификация от третих разработчиков == = Производительность = = Запуск Tornado на производстве = = WSGI и Google AppEngine = = Предостережения и поддержка = '''Перевод: Ростислав Дзинько''' |
Документация к веб серверу Tornado
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:
После установки, вы получите возможность запустить любое из демонстрационных приложений из папки 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.
Основные модули
web - веб фреймворк, на котором построен FriendFeed. web содержит большинство важных функций Tornado
escape - методы кодирование/декодирование XHTML, JSON и URL
database - Простая обертка вокруг !MySQLdb для упрощения спользования СУБД MySQL
template - язык шаблонов, в основе которого находится язык Python
httpclient - неблокирующий HTTP клиент созданный для работы с модулями web и httpserver
auth - реализация схем аутентификации и авторизации от третих разработчиков (Google OpenID/OAuth, Facebook Platform, Yahoo BBAuth, FriendFeed OpenID/OAuth, Twitter OAuth)
locale - поддержка локализации/интернационализации
options - синтаксический анализатор файлов настроек и аргументов коммандной строки, оптимизированный для использования в среде сервера
Низкоуровневые модули
httpserver - очень простой HTTP сервер, на основе которого построен модуль web
iostream - простая обертка вокруг неблокирующих сокетов для обеспечения общих шаблонов считывания и записи
ioloop - основная петля ввода/вывода
Другие модули
s3server - веб сервер, который реализует большую часть интерфейса Amazon S3, с локальным файловым хранилищем данных
Руководство
Обработчики и параметры запросов
Веб Приложение Tornado отображает (maps) URL или шаблоны URL в подклассы tornado.web.RequestHandler. Эти классы определяют get() и post() методы для обработки запросов HTTP GET и POST по этому URL.
Этот код отображает корневой URL / в MainHandler, а шаблон URL /story/([0-9]+) в StoryHandler. Регулярные выражения передаются в качестве аргументов методам класс RequestHandler:
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 ])
С помощью метода get_argument() вы можете получить аргументы строки запроса и распарсить тело POST запроса:
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"))
Если вы хотите отправить сообщение об ошибке клиенту, например, 403 Unauthorized, вам достаточно вызвать исключение tornado.web.HTTPError:
The request handler can access the object representing the current request with self.request. The HTTPRequest object includes a number of useful attribute, including:
- arguments - all of the GET and POST arguments
- files - all of the uploaded files (via multipart/form-data POST requests)
- path - the request path (everything before the ?)
- headers - the request headers
See the class definition for HTTPRequest in httpserver for a complete list of attributes.
Шаблоны
Cookies и защищенные cookies
Аутентификация пользователей
Защита от CSRF
Статические файлы и агрессивное кеширование файлов
Локализация
Модули пользовательского интерфейса
Неблокирующие, асинхронные запросы
Аутентификация от третих разработчиков
Производительность
Запуск Tornado на производстве
WSGI и Google AppEngine
Предостережения и поддержка
Перевод: Ростислав Дзинько