Програмер(и) | Glyph Lefkowitz |
---|---|
Прво издање | 22.10.2002.[1] |
Репозиторијум | |
Написан у | Пајтон |
Тип | Event-driven networking |
Лиценца | MIT License |
Веб-сајт | twistedmatrix |
Twisted је фрејмворк мрежног програмирања који ради под другим дешавањима у окружењу написан у Пајтону и лиценциран је под MIT Лиценцом.
Twisted пројекти разнолико подржавају TCP, UDP, SSL/TLS, IP multicast, Unix домене сокета, велики број протокола (укључујући HTTP, XMPP, NNTP, IMAP, SSH, IRC, FTP, и друге), и много више. Twisted је базиран на парадигми програмирања који зависе од дешавања у окружењеу, што значи да корисници Twisted-а пишу кратке позиве која су позвана од стране фрејмворка.
Twisted је дизајниран за потпуно раздвајање између логичких протокола (обично ослањајући се на семантику конекције стримовања, као што је HTTP или POP3) и слојева физичког транспорта који подржавају такве семантике стримовања (као што су фајлови, сокети, или SSL библиотеке). Конекција између логичког протокола и слоја транспорта се дешава у последњем тренутку — тачно пре него што се информација проследи у пример логичког протокола. Логички протокол је информисан примером слоја транспорта, и може га користити да шаље поруке назад и да провери идентитет повезаног корисника. Имајте на уму да је и даље могуће, у коду протокола, да се поднесе дубок упит транспортног слоја на транспортним проблемима (као што је провера SSL сертификата са стране клијента). Природно, такав протокол неће бити успешан (изузетак) ако транспортни слој не подржава такву семантику.
Центар модела апликације Twisted је концепт одложених (другде назван future). Одложени је пример дизајниране класе да прима и обрађује резултат који још није израчунат, на пример зато што је базиран на подацима удаљеног корисника. Одложени могу бити пренесени около, као било који други објекти, али не може бити затражено од њих за њихову вредност. Сваки одложени подржава ланац позива. Када одложени добију вредност, пренесена је потпрограмима на ланцу позива, што чини да сваки позив постаје унос за следећи. Одложени чине могућим да се расподеле да се оперише на резулату позива потпрограма пре него што његова вредност постане доступна. На пример, ако одложена врати стринг од даљинског корисника који има IP адресу у четвороструком формату, позив моће бити привезан да га преведе у 32-битни број. Било који корисник одложених их може сад третирати као одложену која враћа 32-битни број. Ово, и повезана могућност дефинисања "errbacks" (позиви који су названи као носиоци грешака), дозвољава коду да одреди унапред шта да уради када се деси асинхрони догађај, без заустављања да се чека на догађај. У системима без догађаја, на пример нитнама, оперативни систем позива преране и додатне организационе нитне сваки пут када је позив блокирања направљен.
Twisted подржава слој апстракције поред raw нитни — коришћењем нитни као одложени извор. Тиме, одложена је одмах враћена, која ће вратити вредност када се нитна заврши. Позиви могу бити довезани који ће бити покренути у главној нитни, и тиме избегавајући потребу за комплексним решењима закључавања. Један од примера таквог коришћења, који долази од библиотеке Twisted подршке, је коришћење овог модела да се позову у базе података. Позив саме базе података се дешава у страној нитни, али анализа резултата се дешава у главној нитни.
Twisted се може интегрисати са страним дешавањима петљи, као што су GTK+, Qt и Cocoa (кроз PyObjC). Ово дозвољава коришћење Twisted-а као слој подршке умрежавања у програмима графички корисничког интерфејса, користећи се свим својим библиотекама без додавања нит-по-сокету методе, као што би нативна Пајтон библиотека користила.
Твистед је једна од најјачих, најстабилнијих и најкоришћенијих библиотека доступних за Пајтон[тражи се извор]. Његова намјена је у почетку била да служи као бесплатан сервер за опслуживање мрежних рачунарских игара, али је настала вишенамјенска библиотека која се може подијелити на:
* twisted.cred, опционални систем за аутентификацију * twisted.enterprise, асинхрони адаптер за подршку Пајтона за DB 2.0 * twisted.internet, главна петља * twisted.manhole, сервис за отклањање грешака * twisted.protocols, колекција популарних протокола (помагачи) * twisted.python, скуп програмерских апстракција * twisted.spread, подршка за серијализацију и удаљено управљање * twisted.trial, окружење за тестирање јединица * twisted.web, моћан веб-сервер, упарљив са пројектима Вовен и Невов * twisted.conch, SSL 2.0, написан за потребе Пајтона * twisted.mail, сервер за електронску пошту (упарљив са пројектима за филтрирање поште) * twisted.words, одвојен пројекат (попут посљедња 3) за рад по протоколима Инстант месинџера
Главна особина Твистеда јесте да реализација свих серверских и клијентских протокола тежи ка томе да буде неблокирајућа. Како би се такав механизам остварио, ради се на сљедећи начин:
Највећи проблем схватања функционисања асинхроног сервера стоји у разумијевању рада објекта за контролу одлагања акција (енгл. Deferred.