Tornado: Neuer non-blocking Python Web-Server

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Benutzeravatar
Defnull
User
Beiträge: 778
Registriert: Donnerstag 18. Juni 2009, 22:09
Wohnort: Göttingen
Kontaktdaten:

Alternative zu fapws3: http://www.tornadoweb.org/

Tornado is an open source version of the scalable, non-blocking web server and tools that power FriendFeed. The FriendFeed application is 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 underlying non-blocking infrastructure.

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 epoll, 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 — 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 C10K problem.)
Bottle: Micro Web Framework + Development Blog
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Hatte mir Tornadoweb gestern noch kurz angeschaut. Asynchron klingt interessant. Größe des Rahmenwerks ist auch interessant. Documentation sieht okay aus. Und der Quelltext war okay, auch wenn mir einige Namenskonventionen nicht gefallen. Mal wieder ein eigenes Django-ähnliches Template-Rahmenwerk, welches man deutlich einfacher bauen könnte - IMHO. Und das Parsen von HTTP-Requests ist, was ich so bei meinen auch nicht perfekten HTTP-Spec-Kenntnissen sagen kann, nun, sagen wir mal, recht naiv. Egal.

Doof, dass ich unter OS X 10.5 pycurl nicht in der gewünschten (oder einer anderen) Version gebaut bekomme. Musste `port install py26-curl` bemühen, was wieder mal das halbe Internet lädt - und es ist eine andere Versionsnummer. Und wozu ich simplejson brauche, wenn doch mein Python mit einer json-Bibliothek kommt, weiß ich auch nicht. So etwas missfällt mir. Ging aber auch ohne diese Bibliothek...

Helloworld läuft, das Chat-Beispiel nicht. Da bekomme ich - verwundert, dass der versucht, mich über Googles Open-ID mit dem richtigen Namen einzuloggen - einen HTTP 599 von Google zurück. Das Problem hatte gestern auch jemand anderes laut Mailing List. Noch keine Antwort.

Habe den Login umgangen und einen User hart verdrahtet und dann geht's auch mit dem Chat-Beispiel, was recht nett ist. Schick wäre natürlich, wenn der Server automatisch bei Änderungen neu starten würde. So ist das Experimentieren etwa so angenehm wie mit einer jedes Mal zu deployenden Java-EE-Anwendung.

Das Blog-Beispiel benötigt MySQL - warum nutzen sie nicht das mitgelieferte sqlite? Grummel. Dafür funktioniert die Facebook-Demo-App, nur was macht die eigentlich? Ich glaube, die zeigt einfach eine "Twitter-Update-Stream" a la Facebook an. Wie auch immer...

Was mich an Tornado interessiert ist, dass es ja nur einen Thread gibt, aber einen eigenen Server. Damit kann ich einen einfachen Key-Value-Store bauen.

Vor längerer Zeit hatte ich mal versucht, die älteste Version des Spiel "stellarcrisis", die ich finden konnte für Django zu portieren - einfach weil dieses Spiel das erste "Browser-Game" war. Der Code ist grausam und in der C-ähnlichen aber sonst unbekannten Sprache Pike geschrieben, wie wohl in MUDs ihren Ursprung hat und dann in den Roxen-Webserver als Scriptsprache eingebaut wurde. Wie auch immer, als Persistenzlösung benutzt SC eine HashMap, also quasi einen Key-Value-Store noch bevor es dieses Wort gab und mein naiver Versuch, alles auf eine relationale Datenbank umzustellen war nicht wirklich erfolgreich damals. Vielleicht sollte ich's jetzt noch mal basierend auf Tornado versuchen.

Schön, das Python da ankommt, wo andere schon vor 13 Jahren waren :)

Stefan
apollo13
User
Beiträge: 827
Registriert: Samstag 5. Februar 2005, 17:53

sma hat geschrieben: Helloworld läuft, das Chat-Beispiel nicht. Da bekomme ich - verwundert, dass der versucht, mich über Googles Open-ID mit dem richtigen Namen einzuloggen - einen HTTP 599 von Google zurück. Das Problem hatte gestern auch jemand anderes laut Mailing List. Noch keine Antwort.
Ohne jetzt zu wissen was HTTP 599 sein soll, denk ich, dass das zu erwarten ist, wenn du das ganze local testest, da openid ja eine callback url mitübergibt, die nach dem auth bei google iwder aufgerufen werden soll. Das wird in deinem Fall wahrscheinlich localhost sein und das geht dann natürlich nicht ;) Du müsstest es mal über deine externe IP versuchen.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

apollo13 hat geschrieben:Ohne jetzt zu wissen was HTTP 599 sein soll, denk ich, dass das zu erwarten ist, wenn du das ganze local testest, da openid ja eine callback url mitübergibt
Vermutlich. Es ist zu lange her, dass ich mir OpenID angeschaut hatte. Ich hätte vermutet, es wäre nur ein Redirect für den Browser, was ja auch für localhost gehen müsste. Aber es kann anders sein. Die Authentifizierung über Facebook klappt jedenfalls auch mit localhost.

Stefan
Antworten