2009-09-11 8 views
14

Ich brauche Hilfe zu verstehen, was der Vorteil der Verwendung eines asynch-Framework ist. Angenommen, ich möchte eine einfache Chat-Web-App entwickeln. Warum kann ich keinen Python-Code in das Django-Framework schreiben, das lange Abfragen durchführt, bei dem ich keine Antwort zurück an den Server sende, bis jemand eine neue Nachricht eingibt? Was bietet Twisted, was einen Vorteil für Echtzeit-Apps wie die Chat-App bietet?Twisted (asynch server) vs Django (oder einem anderen Framework)

Tut mir leid, ich bin offensichtlich wenig verwirrt über die Notwendigkeit für ein asynchrones Framework.

Antwort

16

Asynchrone Server unterstützen eine viel größere Anzahl gleichzeitiger Clientverbindungen. Herkömmliche Server stoßen bei der Wartung einer großen Anzahl gleichzeitiger Clients, insbesondere bei solchen mit langlebigen Verbindungen, auf Thread- und Prozesslimits. Async-Server können auch eine bessere Leistung bereitstellen, da sie die Gemeinkosten von z.B. Thread-Kontextwechsel.

Neben den Twisted Rahmen gibt es auch asynchronen Server-Bausteine ​​in der Standardbibliothek von Python: vorher asyncore und asynchat, aber jetzt auch asyncio.

18

Zuerst Django ist ein Framework für das Schreiben von Web-Anwendungen, so dass es ORM, HTML-Templating, es erfordert einen http-Server usw. Twisted hilft, viel niedrigeren Code als das zu schreiben. Sie könnten twisted verwenden, um den http-Server zu schreiben, auf dem Django läuft. Wenn Sie Django benutzen, sind Sie auf das http-Modell beschränkt, mit twisted könnte es in jedem beliebigen Protokoll kommunizieren, das Sie mögen, einschließlich Push-Protokolle. So erhalten Sie für Ihr Chat-Beispiel einen Server, der besser skaliert, da er Kommentare an Personen senden kann, die sich mit django angemeldet haben, wobei jeder Client wiederholt abfragen muss.

bearbeitet reflektieren Kommentare von: sos-skyl

+0

nicht wirklich wahr; Django führt synchrone IO-Aufrufe aus, weshalb es entweder OR ist. – Henrik

+0

Es ist nicht der Fokus auf asynchron, sondern wie der Stack aussieht. Mit Django ist es ein Webserver, eine WSGI-Implementierung, Django, mein Code. Mit Twisted ist Twisted, mein Code. Mit twisted könnte man einen Webserver, einen XMPP Server, einen IRC Server schreiben. Mit Django ist eine Menge dieser Flexibilität weg, Sie sind an HTTP als Ihr Protokoll gebunden. – stonemetal

0

Sie WHIFF statt entweder verwenden könnte :). Überprüfen Sie http://aaron.oirt.rutgers.edu/myapp/gfChat/nucularChatRoom , die eine JavaScript-Abfrage-Schleife mit Json verwendet, um für Server-Updates zu überprüfen. Du könntest wahrscheinlich etwas Ähnliches machen in Django, aber ich weiß nicht wie, weil ich auf Django aufgegeben habe.

BTW: Ich hoffe, diese Demo auf die Google App-Engine als einen kompletten Service zu verschieben, wenn mein Leben beruhigt sich ein wenig.

+0

Wenn Sie twisted verwenden, können Sie twisted.orbited verwenden, um Updates vom Server an JavaScript-Clients zu senden, die im Browser ausgeführt werden –

0

Wenn Sie sich eine Quelle für die Integration von Twisted und Django ansehen möchten, werfen Sie einen Blick auf Yardbird.

3

In twisted können Sie eigene Protokolle implementieren. Django kann das sicher nicht machen.

5

Der größte Vorteil für mich ist, dass Twisted gibt mir eine Anwendung, die Zustand hat, und kann mit vielen verschiedenen Clients mit vielen Protokollen kommunizieren.

Für mich kommuniziert mein Twisted-Server mit einer Reihe von Sensoren in Häusern und Unternehmen, die den Stromverbrauch überwachen. Es speichert die Daten und speichert aktuelle Daten und Zustände in handlichen Dandy-Python-Klassen im Speicher. Anfragen über xmlrpc von django erhalten diesen Status und können dem Benutzer aktuelle Daten präsentieren. Mein Gridspy-Stuff befindet sich noch in der Entwicklung, daher ist die eigentliche Seite von your.gridspy.co.nz ein bisschen Pre-Alpha.

Der beste Teil ist, dass Sie überraschend wenig Code benötigen, um einen effektiven Server zu machen. Ein erstaunlicher Teil der Arbeit ist für Sie erledigt.