В началото Facebook е построен с помощта на PHP и MySQL, но тъй като трафика и размера на мрежата се увеличава, така че направих нейните изисквания за по-добра и по-бърза доставка на съдържание в реално време.
Това доведе екипа Facebook, за да се ровя в други технологии и езици извън PHP, а компанията скоро се оказа забележителности на Python, програмен език, използван от Google, за да изгради своя търсачка.
Усилията на екипа бе превърнат в един продукт, наречен Tornado, рамка Python, специално предназначен за работа с HTTP суровини връзки в една проста асинхронен без блокиране на пътя.
Tornado е вдъхновен от други инструменти като Web.py и Google за уеб приложение, но също така включва допълнителни функции, както добре.
В центъра на цялата рамка пребивава мощен HTTP сървър, който се подсилва от набор от модули за справяне със съдържание i18n, манипулация низ, поколение изход, асинхронни операции, от трета страна код, дървени трупи, и така нататък.
Освен Касандра , Tornado е един от най-успешните отворени произхождащи приложения на Facebook до момента.
Какво ново в тази версия
- Нови модули: tornado.locks и tornado.queues
Какво ново във версия 4.2:
- Нови модули: tornado.locks и tornado.queues
Какво ново във версия 4.1:
- декоратор The tornado.web.stream_request_body позволява на големи файлове да бъдат качен с ограничено използване на паметта.
- HTTP, свързани с код сега е поделена между tornado.httpserver, tornado.simple_httpclient и tornado.wsgi модули, като подкрепа за функции като chunked и софтуерна кодиране по-последователно. HTTPServer сега използва нови делегатски интерфейси, определени в tornado.httputil в допълнение към старата си еднократна обаждане интерфейс.
- New модул tornado.tcpclient създава TCP връзки с неблокираща DNS, SSL договаряне, както и подкрепа за IPv6.
<> Li Coroutines сега са по-бързи и се използват широко в целия самата Tornado. Още методи сега се връщат Futures, включително повечето IOStream методи и RequestHandler.flush.
<> Ли Много методи потребителя преодоляно сега оставя да се върне на Future за контрол на потока.
Какво ново във версия 3.2.2:
- Токънът XSRF сега е кодиран с случаен маска за всяка заявка. Това го прави безопасно да се включат в компресирани страници, без да са уязвими по отношение на нарушението атаката. Това се отнася за повечето приложения, които използват както на xsrf_cookies и опциите GZIP (или имат софтуерна прилага от пълномощник).
- Ако Tornado 3.2.2 се пуска по същото време, когато по-старите версии на една и съща област, има някакъв потенциал за проблеми с различните версии на бисквитките. Xsrf_cookie_version за настройка на приложение = 1 може да се използва за преходен период, за да се генерира по-възрастен бисквитка формата на нови сървъри.
- tornado.platform.asyncio сега е съвместим с божур версия 0.3.
Какво ново във версия 3.2.1:
- Форматът подписано стойност, използвана от RequestHandler.set_secure_cookie и RequestHandler.get_secure_cookie е променило да бъде по-сигурен. Това е смущаващо промяна. Функциите на secure_cookie предприемат нови параметри версия за подпомагане на прехода между бисквитка формати.
- Новият формат бисквитка поправя уязвимост, която може да присъства в приложения, които използват множество бисквитки, когато името на една бисквитка е префикс на името на друг.
- За да минимизират прекъсванията, бисквитки в стария формат ще се приемат по подразбиране, докато не изтече. Приложенията, които могат да бъдат уязвими може да отхвърли всички бисквитки в стария формат чрез преминаване min_version = 2 до RequestHandler.get_secure_cookie.
Какво ново във версия 3.2:
- Ново приложение за създаване default_handler_class може да се използва, за да лесно да настроите потребителски 404 страници.
- New Autoreload настройките за приложения compiled_template_cache, static_hash_cache и serve_traceback може да се използва за контрол на отделните аспекти на режим за отстраняване на грешки.
- New методи RequestHandler.get_query_argument и RequestHandler.get_body_argument и нови атрибути HTTPRequest.query_arguments и HTTPRequest.body_arguments позволяват достъп до аргументи, без да използвате комбинация от тези от низ заявка с тези от искането тялото.
- RequestHandler.decode_argument и сродните му методи сега повдигат един HTTPError (400), вместо UnicodeDecodeError когато аргумент не може да бъде декодиран.
- RequestHandler.clear_all_cookies сега приема доводите на домейни и с пътя, точно като clear_cookie.
- Това вече е възможно да се уточни, работещи по име, когато се използва класа URLSpec.
- Application вече приема 4-кортежи да посочите параметъра име (което преди това е необходимо изграждането на URLSpec обект вместо кортеж).
- Фиксирана неправилно съобщение за грешка, когато методите манипулатор връщат стойност, различна от None или Future.
- Изключения вече няма да бъдат записвани два пъти, когато се използва кактоasynchronous и @ gen.coroutine.
Какво ново във версия 3.1:
- Много модели цикли са били разделени на целия пакет, позволяващ за по-ефективно събиране на боклука на CPython.
- смълчани някои лог съобщения, когато връзките са отворени и веднага затвори (т.е. сканиране на портове), или други ситуации, свързани с затворени връзки.
- Различни малки speedups: HTTPHeaders случай нормализация, UIModule прокси обекти, предкомпилират някои regexes .
Какво ново във версия 3.0.2:
- tornado.auth.TwitterMixin предприятието подразбиране версия 1.1 на Twitter API, вместо версия 1.0, която се преустанови за 11 юни Той също вече използва HTTPS, когато говорите с Twitter.
- Fixed потенциален теч памет с дълга верига от gen.coroutine или gen.engine функции.
Какво ново във версия 3.0:
- The `` callback`` аргумент за много асинхронни методи е Сега незадължителни, както и тези методи връщат `.Future`. The `tornado.gen` модул сега разбира` `Futures``, и тези методи могат да се използват пряко без` .gen.Task` обвивка.
- New функция `.IOLoop.current` връща` .IOLoop` която се изпълнява на текущата нишка (за разлика от `.IOLoop.instance`, която връща обикновено основната нишка е) IOLoop конкретна нишка (.
- New клас `tornado.netutil.Resolver` предвижда асинхронен интерфейс за резолюция DNS.
- New клас `` tornado.process.Subprocess` увива subprocess.Popen` с `.PipeIOStream` достъп до файлови дескриптори на детето.
- `.IOLoop` сега има статичен` конфигуриране & # x3c; .Configurable.configure & # x3e; `метод като този на` .AsyncHTTPClient`, който може да се използва за избор на прилагането `.IOLoop` различна от по подразбиране. * `.IOLoop` Вече могат евентуално използването на монотонна часовник, ако има такива.
Какво ново във версия 2.4.1:
- Фиксирана теч с памет в tornado.stack_context, че е особено вероятно с проточилия @ gen.engine функции.
- tornado.auth.TwitterMixin сега работи върху Python 3.
- Фиксирана бъг в която IOStream.read_until_close с стрийминг обаждане понякога ще мине последното парче на данни до крайния обратно повикване, вместо на стрийминг обратно повикване.
Какво ново във версия 2.4:
- Фиксирани Python 3 грешки в tornado.auth, tornado.locale и tornado.wsgi.
- OAuthMixin вече приема & quot; & quot OOB; като callback_uri.
- OpenIDMixin сега също се връща на терена claimed_id за потребителя.
- tornado.platform.twisted изключване последователност сега по-съвместим е.
- Конфигурацията на сеч, използвани в tornado.options сега е по-толерантни към не-ASCII байтови стрингове.
Какво ново във версия 2.3:
- `tornado.httpclient.HTTPClient` вече поддържа една и съща конструктора аргументи за ключови думи като `AsyncHTTPClient`.
- The `` max_clients`` аргумент дума за `AsyncHTTPClient.configure` сега работи.
- `tornado.simple_httpclient` вече поддържа` `` `OPTIONS`` и PATCH`` HTTP методи.
- `tornado.simple_httpclient` е по-добре за затваряне гнездата си, вместо да ги оставя за събиране на боклука.
- `tornado.simple_httpclient` правилно проверява SSL сертификати за URL адреси, съдържащи литерали IPv6 (Този бъг засегнати Python 2.5 и 2.6).
- `tornado.simple_httpclient` вече не включва основни разрешения пълномощията в` `Host`` заглавната част, когато тези документи се извличат от URL.
- `tornado.simple_httpclient` вече не променя речника удар с глава на обаждащия-доставени, което е причинило проблеми, когато след пренасочвания.
- `tornado.curl_httpclient` вече поддържа клиентски сертификати SSL (използвайки същата` `` `client_cert`` и client_key`` аргументи като` tornado.simple_httpclient`.
Какво ново във версия 2.2.1:
- <> Li поправки по сигурността:
- `tornado.web.RequestHandler.set_header` сега правилно хигиенизира входни стойности за защита срещу удар с глава на инжектиране, цепене отговор и т.н. (тя винаги се е опитал да направи това, но проверката е неправилно). Имайте предвид, че пренасочва, най-вероятният източник на такива грешки, са под закрила на отделна проверка в `RequestHandler.redirect`.
- Корекции на грешки:
- Цветни сеч конфигурация в `tornado.options` е съвместим с Python 3.2.3 (и 3.3).
Какво ново във версия 2.2:.
- Актуализирана и разширена поддръжка WebSocket
- Подобрена съвместимост в моста Twisted / Tornado.
- грешки Шаблон сега генерират добри стека следи.
- По-добра обработка на изключения в `tornado.gen`.
Какво ново във версия 2.1.1:
- Корекции на грешки:
- Фиксирана боравене с затворени връзки с `` epoll`` (т.е. Linux) `` IOLoop``. Преди това, затворени връзки могат да бъдат спрени твърде рано, което най-често се проявява като & quot; Stream е затворен & quot; изключения в `` SimpleAsyncHTTPClient``.
- Фиксирана случай, в който chunked отговори могат да бъдат затворени преждевременно, което води до скъсен изход.
- `` IOStream.connect`` предприятието отчита грешки по-последователно чрез сеч и близо обратно повикване (това се отразява например връзки към Localhost на FreeBSD).
- `` IOStream.read_bytes`` отново приема едновременно `` `` int`` и long`` аргументи.
- `` PeriodicCallback`` вече не работи многократно, когато `` IOLoop`` повторения завършат по-бързо от резолюцията на `` time.time () `` (главно проблем на Windows).
Какво ново във версия 2.1.0:
- Diginotar е била отстранена от сертификати CA файла по подразбиране използвана от `SimpleAsyncHTTPClient`
- За да се улесни някои допълнителни сценарии мулти-процеса, `` HTTPServer`` има нов метод `` add_sockets`` и сокет-код откриване е на разположение отделно като `tornado.netutil.bind_sockets`.
- Поддръжка за сигурни бисквитки, написани от предварителните 1.0 изпускания на Tornado е била отстранена.
- подкрепа Windows е подобрен.
Какво ново във версия 2.0.0:
- Основни промени:
- изход Template автоматично се избягали по подразбиране.
- изпълнението по подразбиране AsyncHTTPClient сега simple_httpclient.
- Python 3.2 вече се поддържа.
- обратна съвместимост:
- Template autoescaping е активирана по подразбиране. Приложения модернизация от предно издание на Tornado трябва или забраняване autoescaping или адаптират своите шаблони, за да работи с него. За повечето приложения, най-простият начин да направите това е да се премине autoescape = Няма да конструктора за кандидатстване.
- Приложения, които желаят да продължат да използват curl_httpclient вместо simple_httpclient може да направи това, като се обадите AsyncHTTPClient.configure (& quot; & quot tornado.curl_httpclient.CurlAsyncHTTPClient;) в началото на процеса. Потребителите на Python 2.5-вероятно ще искате да използвате curl_httpclient като simple_httpclient поддържа само SSL на Python 2.6 +.
- Python 3 съвместимост участват много промени в цялата програмния код, така че потребителите да се насърчават да тестват своите приложения по-добре от обикновено, когато модернизация на тази версия.
- Други промени във версия 4.1:
- Templates поддържат няколко нови директиви: - {% autoescape ...%} да контролира бягство поведение - {% сурова ...}% за неекраниращия изход - {% модул ...}% за свикване UIModules * {% модул Шаблон (с пътя, ** kwargs)%} сега могат да бъдат използвани, за да се обадя друг шаблон с независим именно пространство.
- Всички IOStream извика сега тече директно върху IOLoop чрез add_callback.
- HTTPServer вече поддържа IPv6, когато са налични. За да забраните, мине семейството = socket.AF_INET да HTTPServer.bind ().
- HTTPClient вече поддържа IPv6, конфигурируеми чрез allow_ipv6 = булев на HTTPRequest. allow_ipv6 подразбиране невярна на simple_httpclient и вярно на curl_httpclient.
- RequestHandlers могат да използват за кодиране, различна от UTF-8 за параметрите на заявката с императивни decode_argument ().
- производителност, особено за приложения, които използват много IOLoop таймаут интервали.
- HTTP OPTIONS метод вече не се нуждае от XSRF знак.
- JSON изход (RequestHandler.write (Dict)) предприятието определя Content-Type до прилагане / JSON.
- ETAG изчисляване вече могат да бъдат персонализирани или забранено от императивни RequestHandler.compute_etag.
- променлива USE_SIMPLE_HTTPCLIENT среда вече не се поддържа. Използвайте AsyncHTTPClient.configure вместо това.
подобрения
Какво ново във версия 1.2.1:
- Тази версия съдържа само две малки промени в сравнение с версията 1.2:
- FacebookGraphMixin е актуализиран, за да работят със скорошна промяна на Facebook API.
- Текущи & quot; setup.py инсталирате & quot; вече няма да се опита автоматично да инсталирате pycurl. Това не е работа и на платформи, където най-добрият начин, за да инсталирате pycurl е направо нещо като ап-да, вместо easy_install. Това е важен ъпгрейд, ако използвате FacebookGraphMixin, но в противен случай тя може да бъде безопасно игнорирани.
Какво ново във версия 1.2.0:
- Тази версия включва назад-несъвместимо промяната сигурност от Версия 1.1.1.
- За прозрачно замени tornado.httpclient.AsyncHTTPClient с тази нова реализация, можете да зададете на околната среда променлива USE_SIMPLE_HTTPCLIENT = 1
- Заявка за сеч сега се извършва чрез прилагане, а не на RequestHandler. Влизане поведение може да се персонализира от всяка от императивни Application.log_request в подклас или чрез преминаване log_function като настройка за кандидатстване.
Какво ново във версия 1.1.1:
- Tornado 1.1.1 е назад-INCOMPATIBLE сигурност актуализация, която фиксира уязвимост XSRF.
Какво ново във версия 1.1:
- Changes:
- RequestHandler.async_callback и сродните му функции в други класове, вече е необходимо в повечето случаи (не въпреки че е безвреден за да продължите
- ги използвате). Незабелязана изключения сега ще предизвика искане да бъдат затворени, дори в обаждане. Ако сте любопитни как работи това, вижте новата tornado.stack_context модул.
- Новият tornado.testing модул съдържа подкрепа за единица тестване асинхронен IOLoop базиран код.
- AsyncHTTPClient е пренаписана (новата изпълнението е на разположение като AsyncHTTPClient2 в Tornado 1.0; и двете имена са подкрепени за обратна
- съвместимост).
- Модулът tornado.auth е имал редица новости, включително подкрепа за OAuth 2.0 и API Facebook Graph, и обновяване на Twitter и Google подкрепа за OAuth 1.0a.
- Модулът WebSocket се завръща и поддържа най-новата версия (76) от протокола WebSocket. Имайте предвид, че този модул интерфейс е различен от модула WebSocket която се появи в предварителните 1.0 версии на Tornado.
- Нов метод RequestHandler.initialize () може да бъде преодоляно в подкласове за опростяване аргументи обслужване от URLSpecs. Последователността на методи, наречен по време на инициализация е документирано в http://tornadoweb.org/documentation#overriding-requesthandler-methods
- Модулът httpclient вече поддържа HTTP прокси сървъри.
- Когато HTTPServer се провежда в SSL режим, SSL ръкостискане в момента е без блокиране.
- обратна съвместимост:
- Докато повечето потребители на Tornado не трябва да имат, за да се справят с модула stack_context директно, потребителите на работниците басейни конци и подобни конструкции може да се наложи да използвате stack_context.wrap и / или NullContext за да се избегне изтичане на памет.
- Новият AsyncHTTPClient все още работи с libcurl версия 7.16.x, но тя представя по-добре, когато libcurl както и pycurl са най-малко версия 7.18.2.
- OAuth сделки, започнати по силата на предишните версии на модула AUTH не могат да бъдат завършени в рамките на новия модул. Това важи само за първоначалния процес на разрешение; веднъж оторизиран символичен знак, че е издадена работи с или версия.
<> Li get_argument () и свързаните с тях методи вече работят по искания поставени в допълнение към POST.
<> Ли Много поправки по-малки грешки и обновления на документацията
бележки
<> силни Изисквания
- Python 2.6 или по-висока
Коментари не е намерена