Tornado (Webserver)
# Tornado (Webserver)

Tornado ist ein freier, nicht blockierender Webserver sowie ein einfaches Mikro-Webframework in Python. Die Entwicklung begann bei FriendFeed, nach der Übernahme von FriendFeed durch Facebook wurde Tornado unter einer Open-Source-Lizenz veröffentlicht.

## Leistung

Der Tornado-Webserver nutzt Wartezeiten, zum Beispiel beim Empfang von Daten, indem er sich währenddessen weiteren Aufgaben zuwendet (unter Linux mit epoll, unter BSD mit kqueue). Dieses nicht blockierende Verhalten dient dazu, eine sehr große Zahl von Anfragen gleichzeitig abzuwickeln (C10K-Problem). Messungen ergeben über 8.000 bearbeitete Anfragen pro Sekunde.

Performance-Vergleich mit dem AMD Opteron, 2,4 GHz und vier Kernen :

| Server | Setup | Anfragen pro Sekunde |
| - | - | - |
| Tornado | Mit der geläufigen produktiven Umsetzung von 4 Tornadoinstanzen und nginx als Proxy. | 8213 |
| Tornado | Standalone | 3353 |
| Django | Apache/mod wsgi | 2223 |
| web.py | Apache/mod_wsgi | 2066 |
| CherryPy | Standalone | 785 |

## Module

Tornado stellt Mixins für die Authentifizierungssysteme OpenID und OAuth zur Verfügung, mit vereinfachter Anbindung an die Authentifizierungsschnittstellen von Google, Facebook Connect und Twitter.

Die asynchrone Bearbeitung von Anfragen war von Anbeginn Kernelement von Tornado. Seit Python 3.5 werden hierfür statt eines eigenen Moduls die Python-Sprachelemente async def und await genutzt. Eine Beispielanwendung zeigt die Verwendung im FriendFeeds Chatsystem.

Daneben stehen die gängigen Komponenten eines Mikro-Webframeworks zur Verfügung:

* Verwaltung von Cookies (mit Möglichkeit diese zu signieren um ihre Authentizität zu überprüfen) und Sessions
* Templatesystem
* Cross-Site-Scripting-Schutz
* Support für Mehrsprachigkeit
