Twisted (software) - Twisted (software)
![]() | |
Původní autoři | Glyph Lefkowitz |
---|---|
Vývojáři | Společenství |
První vydání | 22. října 2002[1] |
Stabilní uvolnění | 20.3.0 (20. března 2020[2]) [±] |
Úložiště | ![]() |
Napsáno | Krajta |
Typ | Událost řízena síťování |
Licence | Licence MIT |
webová stránka | www![]() |
Zkroucený je událost-řízený síťové programování rámec napsáno v Krajta a licencován pod Licence MIT.
Zkroucené projekty různě podporují TCP, UDP, SSL / TLS, Vícesměrové vysílání IP Doména Unix zásuvky, mnoho protokolů (včetně HTTP, XMPP, NNTP, IMAP, SSH, IRC, FTP a další) a mnoho dalšího. Twisted je založen na programování řízené událostmi paradigma, což znamená, že uživatelé Twisted píší krátce zpětná volání které se nazývají rámcem.
Základní myšlenky
Oddělení protokolů a transportů
Twisted je navržen pro úplné oddělení mezi logickými protokoly (obvykle se spoléhá na sémantiku připojení založeného na proudu, jako je HTTP nebo POP3 ) a fyzické transportní vrstvy podporující takovou sémantiku založenou na toku (jako jsou soubory, zásuvky nebo knihovny SSL). Spojení mezi logickým protokolem a transportní vrstvou nastává v posledním možném okamžiku - těsně před předáním informací do instance logického protokolu. Logický protokol je informován o instanci transportní vrstvy a může jej použít k odesílání zpráv zpět a ke kontrole identity partnera. Všimněte si, že v kódu protokolu je stále možné hluboce dotazovat transportní vrstvu na problémy s přenosem (například kontrola certifikátu SSL na straně klienta). Tento kód protokolu přirozeně selže (vznést výjimku ), pokud transportní vrstva takovou sémantiku nepodporuje.
Odloženo
Ústředním bodem aplikačního modelu Twisted je koncept a odložený (jinde se nazývá a budoucnost ). Odložená je instance třídy určená k přijímání a zpracování výsledku, který ještě nebyl vypočítán, například proto, že je založen na datech od vzdáleného partnera. Odklady lze předávat, stejně jako běžné objekty, ale nelze je požádat o jejich hodnotu. Každý odložený podporuje řetězec zpětného volání. Když odložené získá hodnotu, předá se funkcím v řetězci zpětného volání, přičemž výsledek každého zpětného volání se stane vstupem pro další. Odložené umožňují operovat na výsledku volání funkce, než bude k dispozici jeho hodnota.
Například pokud odložený vrátí řetězec ze vzdáleného partnera obsahujícího IP adresa ve formátu quad lze připojit zpětné volání a přeložit jej na 32bitové číslo. Kterýkoli uživatel odloženého účtu to nyní může považovat za odložený návrat 32bitového čísla. Toto a související schopnost definovat "errbacks" (zpětná volání, která se nazývají jako obslužné rutiny chyb), umožňuje kódu předem určit, co má dělat, když dojde k asynchronní události, aniž by přestal čekat na událost. V systémech, které nejsou řízeny událostmi, například použití vlákna, operačnímu systému vznikají předčasné a další režijní organizační vlákna pokaždé, když je provedeno blokující volání.
Podpora vláken
Twisted podporuje abstrakci nad surovými vlákny - pomocí vlákna jako odloženého zdroje. Okamžitě je tedy vrácen odklad, který po dokončení vlákna obdrží hodnotu. Lze připojit zpětná volání, která se spustí v hlavním vlákně, čímž se zmírní potřeba komplexních řešení zamykání. Ukázkovým příkladem takového použití, které pochází z knihoven podpory Twisted, je použití tohoto modelu k volání do databází. Samotné volání databáze se děje na cizím vlákně, ale analýza výsledku se děje v hlavním vlákně.
Podpora zahraniční smyčky
Twisted lze integrovat se smyčkami zahraničních událostí, jako jsou například smyčky GTK +, Qt a Kakao (přes PyObjC ). To umožňuje použít Twisted jako síťovou vrstvu v grafické uživatelské prostředí (GUI) programy, které používají všechny své knihovny bez přidání režie na vlákno za soket, jako by to bylo při použití nativní knihovny Pythonu. Plnohodnotný webový server lze například integrovat do procesu s programem GUI pomocí tohoto modelu.
Aplikace využívající Twisted
![]() | Tato sekce potřebuje další citace pro ověření.Březen 2017) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
- The BuildBot systém nepřetržité integrace se při komunikaci mezi klientem a serverem spoléhá na Twisted.[3]
- Software ITA vyvinula systém rezervace leteckých společností pro Air Canada který používá Twisted značně.[4]
- SageMath, alternativa open-source k Mathematica, Javor, Magma, MATLAB, má webové rozhraní, notebook SageMath,[5] který běží na Twisted serveru.[6]
- Twisted byl použit v Omegle služba chatu jeden na jednoho[7] dokud nebyl z důvodů výkonu nahrazen geventem.[8]
- Server kalendáře Apple používá Twisted,[9] stejně jako některé interní projekty NASA.
- Ulita, implementace Zabezpečte Shell (SSH) protokol
- Původní verze webu sociálních sítí a mikroblogování Jaiku použitý Twisted.[Citace je zapotřebí ]
- Fluidinfo, online cloudový datový obchod, používá Twisted značně pro interní RPC (částečně v kombinaci s Šetrnost a AMQP ), pro jeho interní služby a pro externí API.
- Služba hostování souborů Ubuntu One použitý Twisted.
- Tor2web, HTTP proxy pro Skryté služby Tor (HS) používá Twisted.
- GlobaLeaks, open-source whistleblowing framework používá Twisted.
- Cloudkick, webová aplikace pro správu cloudových serverů, používá Twisted. Nyní byl přepsán pomocí Node.js.
- Twilio, poskytovatel cloudové telefonie používá Twisted.
- Škubnutí, komunita vysílající a chatující videohry, používá Twisted.[10]
- Velocity Weather, API pro zpracování a integraci meteorologických dat je postaveno na Twisted.[11]
- qwebirc, webový IRC klient používá Twisted.
- Zenoss Core, platforma pro správu sítě, používá Twisted pro mnoho interních a sběrných démonů.
- Škrábaný, webový prohledávač založený na Twisted.
- Poslechněte si Wikipedii, a Wikipedia audio-vizualizér používá Twisted k vysílání událostí úprav v reálném čase do prohlížečů.[12]
- Tahoe-LAFS, úložiště distribuovaných dat a systém distribuovaných souborů.
- Potopa, vysoce modulární BitTorrent klient používá Twisted.[13]
- Kouzelná červí díra, nástroj pro bezpečný přenos souborů pomocí PAKE.[14]
Viz také
- Aplikační server
- Vzor reaktoru
- Prostředí Perl Object, srovnatelný rámec pro Perl programovací jazyk
- Netty, pro programovací jazyk Java
- Node.js, pro Javascript
- EventMachine, knihovna pro zpracování událostí pro Rubín[15]
- Kivy (rámec), multiplatformní rozhraní GUI (včetně iOS a Android)[16]
Reference
- ^ Shtull-Trauring, Itamar (2002-10-22). „Twisted 1.0“. zkroucený python (Poštovní seznam). Citováno 2008-08-14.
- ^ „Zprávy - zkroucené / zkroucené“. Citováno 2020-11-04 - přes GitHub.
- ^ "BuildBot Manual". github.com. Archivovány od originál dne 29. 7. 2012. Citováno 2017-10-28.
- ^ "Python slithers into systems". eweek.com.
- ^ Funkce SageMath #
- ^ Sage základní přehled[trvalý mrtvý odkaz ]
- ^ "mistah deejay". omegler.blogspot.com.
- ^ „Skupiny Google“. groups.google.com.
- ^ „Server kalendáře a kontaktů“. www.calendarserver.org.
- ^ „Twitch - Jobs“. Škubnutí.
- ^ "Rychlost počasí -". www.velocityweather.com.
- ^ Monitor zaměřený na webovou zásuvku pro Wikipedii (také wikimon, wikital monsters), hatnote, 2017-09-03, vyvoláno 2017-09-21
- ^ „Potopa: sestavení ze zdroje“. dev.deluge-torrent.org. Citováno 2020-01-08.
- ^ „Kouzelná červí díra“. github.com.
- ^ „EventMachine“. Citováno 20. srpna 2011.
- ^ „Integrace s jinými rámci - dokumentace Kivy 1.11.0.dev0“. kivy.org.