Verdrehte (Software)

Verdrehte
Twisted Logo (software).svg
Originalautor (en) Glyphe lefkowitz
Entwickler (en) Gemeinschaft
Erstveröffentlichung 22. Oktober 2002; Vor 19 Jahren[1]
Stabile Version
22.4.0[2] Edit this on Wikidata / 11. April 2022; vor 3 Monaten
Repository
Geschrieben in Python
Typ Ereignisgesteuert Networking
Lizenz MIT -Lizenz
Webseite www.TwistedMatrix.com Edit this on Wikidata

Verdrehte ist ein ereignisgesteuert Netzwerkprogrammierung Rahmen geschrieben in Python und unter dem lizenziert MIT -Lizenz.

Verdrehte Projekte unterstützen unterschiedlich TCP, UDP, SSL/TLS, IP Multicast, Unix Domain Steckdosen, viele Protokolle (einschließlich Http, XMPP, Nntp, IMAP, Ssh, IRC, Ftpund andere) und vieles mehr. Verdrehte basiert auf dem ereignisgesteuerte Programmierung Paradigma, was bedeutet, dass Benutzer von Twisted Short schreiben Rückrufe die vom Rahmen bezeichnet werden.

Kernideen

Trennung von Protokollen und Transporten

Twisted wurde für die vollständige Trennung zwischen logischen Protokollen ausgelegt (normalerweise stützt sich auf Stream-basierte Verbindungssemantik wie HTTP oder Pop3) und physische Transportebenen, die solche streambasierten Semantik unterstützen (wie Dateien, Sockets oder SSL-Bibliotheken). Die Verbindung zwischen einem logischen Protokoll und einer Transportschicht erfolgt im letzten möglichen Moment - kurz bevor die Informationen in die logische Protokollinstanz übergeben werden. Das logische Protokoll wird über die Instanz der Transportschicht informiert und kann es verwenden, um Nachrichten zurück zu senden und nach der Identität des Peer zu überprüfen. Beachten Sie, dass es im Protokollcode immer noch möglich ist, die Transportschicht zu Transportproblemen tief abfragen zu können (z. B. Überprüfung eines sc-SSL-Zertifikats). Natürlich schlägt ein solcher Protokollcode fehl (Erhöhen Sie eine Ausnahme) Wenn die Transportschicht solche Semantik nicht unterstützt.

Aufschiebungen

Zentral für das verdrehte Anwendungsmodell ist das Konzept von a aufgeschoben (anderswo als a Zukunft). Ein aufgeschobener Fall ist eine Instanz einer Klasse, die ein noch nicht berechnetes Ergebnis empfängt und verarbeitet, beispielsweise, weil sie auf Daten eines Remote -Peer basiert. Aufschubs können wie reguläre Objekte weitergegeben werden, können jedoch nicht nach ihrem Wert gefragt werden. Jeder aufgeschobene Aufschub unterstützt eine Rückrufkette. Wenn der aufgeschobene Wert den Wert erhält, wird er an die Funktionen der Rückrufkette übergeben, wobei das Ergebnis jeder Rückruf zur Eingabe für die nächste wird. Aufschiebungen ermöglichen es, das Ergebnis eines Funktionsaufrufs zu operieren, bevor der Wert verfügbar geworden ist.

Wenn beispielsweise eine aufgeschobene Kennzeichnung eine Zeichenfolge aus einem Remote -Peer mit einem zurückgibt IP Adresse Im Quad-Format kann ein Rückruf beigefügt werden, um ihn in eine 32-Bit-Nummer zu übersetzen. Jeder Benutzer des Aufschubs kann es nun als aufgeschobene Rückgabe einer 32-Bit-Nummer behandeln. Dies und die damit verbundene Fähigkeit, "Fehler" (Callbacks, die als Fehlerhandler bezeichnet werden) zu definieren, ermöglicht es Code, im Voraus anzugeben, was zu tun ist, wenn ein asynchrones Ereignis auftritt, ohne anzuhalten, um auf das Ereignis zu warten. In nicht-event-gesteuerten Systemen beispielsweise mit Verwendung ThemenDas Betriebssystem verursacht bei jedem Blockierungsanruf eine vorzeitige und zusätzliche Overhead -Organisationsthreads.

Fadenstütze

Twisted unterstützt eine Abstraktion über rohe Fäden - unter Verwendung eines Fadens als aufgeschobene Quelle. Somit wird ein Aufschiebung sofort zurückgegeben, was beim Abschluss des Fadens einen Wert erhält. Rückrufe können angebracht werden, die im Hauptfaden ausgeführt werden, wodurch die Notwendigkeit komplexer Sperrenlösungen verringert wird. Ein hervorragendes Beispiel für eine solche Verwendung, die aus Twisteds Support -Bibliotheken stammt, ist dieses Modell, um Datenbanken aufzurufen. Der Datenbankaufruf selbst erfolgt in einem Fremdfaden, aber die Analyse des Ergebnisses erfolgt im Haupt -Thread.

Unterstützung für ausländische Schleife

Verdrehte kann sich in ausländische Ereignisschleifen integrieren, wie z. B. die von Gtk+, Qt und Kakao (durch Pyobjc). Dies ermöglicht die Verwendung von Twisted als Netzwerkschicht in grafische Benutzeroberfläche (GUI) -Programme, die alle Bibliotheken verwenden, ohne einen Thread-pro-Socket-Overhead hinzuzufügen, wie es die native Bibliothek von Python verwendet. Ein vollwertiger Webserver kann beispielsweise mit diesem Modell mit einem GUI-Programm mit einem GUI-Programm integriert werden.

Anwendungen mit Twisted

  • Das Buildbot Das kontinuierliche Integrationssystem basiert auf Twisted für die Client/Server-Kommunikation.[3]
  • Ita Software hat ein System zur Erhaltung von Fluggesellschaften entwickelt Luft Kanada Das nutzt ausgiebig verdreht.[4]
  • Sagemath, eine Open-Source-Alternative zu Mathematica, Ahorn, Magma, Matlab, hat eine webbasierte Schnittstelle, Sagemath Notebook,[5] Das läuft auf einem verdrehten Server.[6]
  • Verdreht wurde in der verwendet Omegle Einzelgesprächsdienst[7] bis es aus Leistungsgründen durch Gevent ersetzt wurde.[8]
  • Der Apple -Kalenderserver verwendet verdrehte,[9] ebenso einige interne Projekte von NASA.
  • Muscheleine Umsetzung der Sichere Schale (SSH) Protokoll
  • Die Originalversion der Social -Networking- und Microblogging -Site Jaiku verwendet verdreht.
  • Fluidinfo, ein Online-Cloud-Datenträger, das für interne RPC ausgiebig verdreht ist (teilweise in Kombination mit Sparsamkeit und Amqp), für seine internen Dienste und für externe APIs.
  • Der Datei-Hosting-Dienst Ubuntu eins verwendet verdreht.
  • Tor2Webein HTTP -Proxy für Tor versteckte Dienste (HS), verwendet verdrehte.
  • GlobalaksEin Open-Source-Whistleblowing-Rahmen verwendet verdrehte.
  • Cloudkick, ein Cloud-Server-Management-Webantrag, das verdreht wird. Es wurde jetzt mit verwendeten umgeschrieben Node.js.
  • Dämmerung, ein Cloud -Telefonieanbieter, verwendet Twisted.
  • Zucken, ein Videospiel -Rundfunk und Chat -Community, verwendet Twisted.[10]
  • Geschwindigkeitswetter, eine meteorologische Datenverarbeitung und Integrations -API, basiert auf Twisted.[11]
  • qwebircEin webbasiertes IRC-Client verwendet Twisted.
  • Zenoss -Kern, Eine Netzwerkmanagementplattform, die für viele interne und Sammlungsdämonen verdreht ist.
  • Scrapy, ein Web -Crawler, der auf Twisted basiert.
  • Hören Sie sich Wikipedia an, a Wikipedia Audio-Visualizer verwendet verdreht, um Echtzeit-Bearbeitungsereignisse an Browser zu übertragen.[12]
  • Tahoe-Lafs, ein verteiltes Datenspeicher und ein verteiltes Dateisystem.
  • Sintflut, ein hochmodular Bittorrent Client, verwendet Twisted.[13]
  • Magic Wormhole, ein sicheres Dateitransfer -Tool verwendet Pake.[14]

Siehe auch

Verweise

  1. ^ Shtull-Trauring, Itamar (2002-10-22). "Twisted 1,0". Twisted-Python (Mailingliste). Abgerufen 2008-08-14.
  2. ^ https://github.com/twisted/twisted/releases/tag/twisted-22.4.0;Veröffentlichungsdatum: 11. April 2022;Abgerufen: 16. April 2022.
  3. ^ "BuildBot Manual". github.com. Archiviert von das Original Am 2012-07-29. Abgerufen 2017-10-28.
  4. ^ "Python schlägt in Systeme". eweek.com.
  5. ^ Sagemath#Funktionen
  6. ^ Salbei ein grundlegender Überblick[Permanent Dead Link]
  7. ^ "Mistah Deejay". Omegler.blogspot.com.
  8. ^ "Google -Gruppen". Groups.google.com.
  9. ^ "Kalender- und Kontaktserver". www.calendarserver.org.
  10. ^ "Zucken - Jobs". Zucken.
  11. ^ "Geschwindigkeitswetter -". www.velocityweather.com.
  12. ^ Ein Websocket-orientierter Monitor für Wikipedia (auch Wikimon, Wikital-Monster), Hatnote, 2017-09-03, abgerufen 2017-09-21
  13. ^ "STRUUGE: Bauen Sie aus der Quelle". dev.deluge-torrent.org. Abgerufen 2020-01-08.
  14. ^ "Magisches Wurmloch". github.com.
  15. ^ "EventMachine". Abgerufen 20. August 2011.
  16. ^ "Integration in andere Frameworks - Kivy 1.11.0.Dev0 -Dokumentation". kivy.org.

Externe Links