Ich höre zunehmend, dass Pythons Twisted Framework Rocks und andere Frameworks im Vergleich blass sind.
Kann jemand etwas Licht ins Dunkel bringen und möglicherweise Twisted mit anderen Netzwerkprogrammierungs-Frameworks vergleichen?
Ich höre zunehmend, dass Pythons Twisted Framework Rocks und andere Frameworks im Vergleich blass sind.
Kann jemand etwas Licht ins Dunkel bringen und möglicherweise Twisted mit anderen Netzwerkprogrammierungs-Frameworks vergleichen?
gevent
ist eine Alternative zu Twisted für die "Wahrsager" -Anwendung blip.tv/file/4883016
Antworten:
Es gibt viele verschiedene Aspekte von Twisted, die Sie vielleicht cool finden.
Twisted enthält viele, viele Protokollimplementierungen, was bedeutet, dass es höchstwahrscheinlich eine API gibt, mit der Sie mit einem Remote-System (in den meisten Fällen entweder Client oder Server) kommunizieren können - sei es HTTP , FTP , SMTP, POP3, IMAP4 , DNS , IRC, MSN, OSCAR, XMPP / Jabber , Telnet, SSH , SSL, NNTP , oder eine der wirklich obskuren Protokolle wie Finger oder ident oder einem der unteren Level - Protokoll-Aufbau-Protokolle wie DJB der netstrings , einfach zeilenorientierte Protokolle oder sogar eines der benutzerdefinierten Protokolle von Twisted wie Perspective Broker (PB) oderAsynchrones Messaging-Protokoll (AMP) .
Eine weitere coole Sache bei Twisted ist, dass Sie zusätzlich zu diesen Protokollimplementierungen auf niedriger Ebene häufig eine Abstraktion finden, die etwas einfacher zu verwenden ist. Wenn Sie beispielsweise einen HTTP-Server schreiben, bietet Twisted Web eine "Ressourcen" -Abstraktion, mit der Sie URL-Hierarchien aus Python-Objekten erstellen können, um zu definieren, wie auf Anforderungen geantwortet wird.
All dies ist mit kooperierenden APIs verbunden, hauptsächlich aufgrund der Tatsache, dass keine dieser Funktionen durch Blockieren im Netzwerk implementiert wird, sodass Sie nicht für jede Operation, die Sie ausführen möchten, einen Thread starten müssen . Dies trägt zur Skalierbarkeit bei, die häufig Twisted zugeschrieben wird (obwohl es sich um die Skalierbarkeit handelt, die nur einen einzelnen Computer betrifft, nicht um die Skalierbarkeit, mit der Ihre Anwendung auf einen ganzen Cluster von Hosts erweitert werden kann), da Twisted Tausende von Hosts verarbeiten kann Verbindungen in einem einzelnen Thread, die in der Regel besser funktionieren als Tausende von Threads, jeweils für eine einzelne Verbindung.
Das Vermeiden von Threading ist auch zum Testen und Debuggen von Vorteil (und damit zur Zuverlässigkeit im Allgemeinen). Da es in einem typischen Twisted-basierten Programm keine vorbeugende Kontextumschaltung gibt, müssen Sie sich im Allgemeinen keine Gedanken über das Sperren machen. Rennbedingungen, die von der Reihenfolge der verschiedenen Netzwerkereignisse abhängen, können durch Simulieren dieser Netzwerkereignisse auf einfache Weise getestet werden (während das Simulieren eines Kontextwechsels von den meisten (beliebigen?) Threading-Bibliotheken nicht bereitgestellt wird).
Twisted geht es auch sehr, sehr um Qualität . Daher werden Sie in einer Twisted-Version selten Regressionen finden , und die meisten APIs funktionieren einfach, auch wenn Sie sie nicht auf die übliche Weise verwenden (weil wir versuchen, alle Arten zu testen, wie Sie sie möglicherweise verwenden, nicht nur die übliche Weg). Dies gilt insbesondere für den gesamten Code, der in den letzten 3 oder 4 Jahren zu Twisted (oder geändert) hinzugefügt wurde, da seitdem eine 100% ige Leitungsabdeckung eine Mindesttestanforderung ist.
Eine weitere oft übersehene Stärke von Twisted sind die zehn Jahre, in denen verschiedene Plattform- Macken herausgefunden wurden . Es gibt viele undokumentierte Socket-Fehler auf verschiedenen Plattformen und es ist wirklich schwer zu lernen, dass sie überhaupt existieren, geschweige denn behandelt werden. Twisted hat nach und nach mehr und mehr davon behandelt, und es ist an dieser Stelle ziemlich gut. Jüngere Projekte haben diese Erfahrung nicht, daher verpassen sie obskure Fehlermodi, die wahrscheinlich nur Benutzern eines von Ihnen veröffentlichten Projekts passieren, nicht Ihnen.
Alles, was ich an Twisted am coolsten finde, ist, dass es eine ziemlich langweilige Bibliothek ist, mit der ich viele wirklich langweilige Probleme ignorieren und mich nur auf die interessanten und lustigen Dinge konzentrieren kann. :) :)
Nun, es ist wahrscheinlich nach Geschmack.
Mit Twisted können Sie auf einfache Weise ereignisgesteuerte Netzwerkserver / -clients erstellen, ohne sich wirklich um alles kümmern zu müssen, was dazu gehört. Und dank der MIT-Lizenz kann Twisted fast überall eingesetzt werden. Aber ich habe kein Benchmarking durchgeführt, daher habe ich keine Ahnung, wie es skaliert, aber ich schätze ziemlich gut.
Ein weiteres Plus wären die Twisted Projects , mit denen Sie schnell sehen können, wie Sie die meisten Server / Dienste implementieren, die Sie möchten.
Twisted hat auch einige großartige Dokumentationen . Als ich vor ein paar Wochen damit anfing, konnte ich schnell einen funktionierenden Prototyp bekommen.
Ganz neu in der Python-Szene, bitte korrigieren Sie mich, wenn ich falsch liege.