Кіріспе
Twisted – Python тілінде жазылған және MIT лицензиясы бойынша лицензияланған оқиға басқарылатын желілік бағдарламалау фреймворкі. Twisted жобалары TCP, UDP, SSL/TLS, IP көп тарату, Unix домендік сокеттері, көптеген протоколдарды (HTTP, XMPP, NNTP, IMAP, SSH, IRC, FTP және т.б.) және тағы да көптеген мүмкіндіктерді қолдайды. Twisted оқиға басқарылатын бағдарламалау парадигмасына негізделген, яғни Twisted қолданушылары фреймворк шақыратын қысқа кері шақыру функцияларын жазады.
Twisted is an event driven network programming framework written in Python and licensed under the MIT License. Twisted projects variously support TCP, UDP, SSL/TLS, IP multicast, Unix domain sockets, many protocols (including HTTP, XMPP, NNTP, IMAP, SSH, IRC, FTP, and others), and much more. Twisted is based on the event driven programming paradigm, which means that users of Twisted write short callbacks which are called by the framework.
Хаттамалар мен тасымалдауларды бөлу
Twisted логикалық протоколдар (әдетте, HTTP немесе POP3 сияқты ағынға негізделген қосылым семантикасын пайдаланатындар) мен мұндай ағынға негізделген семантиканы қолдайтын физикалық тасымалдау қабаттары (файлдар, сокеттер немесе SSL кітапханалары сияқты) арасындағы толық бөліну үшін құрастырылған. Логикалық протокол мен тасымалдау қабаты арасындағы байланыс, ақпарат логикалық протокол мысалына жіберілмес бұрын, соңғы мүмкін сәтте орналасады. Логикалық протокол тасымалдау қабатының мысалы туралы хабардар болады және оны кері хабарламалар жіберу және қарсы тараптың сәйкестігін тексеру үшін пайдалана алады. Протокол кодында тасымалдау қабатын тасымалдау мәселелері бойынша (мысалы, клиенттік SSL сертификатын тексеру) тереңінен сұрауға болады. Әрине, егер тасымалдау қабаты мұндай семантиканы қолдамаса, мұндай протокол коды қателікке ұшырайды (қосымша жағдай тудырады).
Кейінге қалдырылған
Twisted қолданба моделінің орталық тұжырымы кейінге қалдырылған (басқа жерде болашақ деп аталады) ұғымы болып табылады. Кейінге қалдырылған – әлі есептелмеген нәтижені қабылдау және өңдеу үшін жасалған сыныптың бір мысалы, мысалы, ол қашықтағы тараптан алынған деректерге негізделген болуы мүмкін. Кейінге қалдырылғандарды, әдеттегі нысандар сияқты, таратуға болады, бірақ олардың мәнін сұрауға болмайды. Әрбір кейінге қалдырылған кері шақыру тізбегін қолдайды. Кейінге қалдырылған мәнді алғанда, ол кері шақыру тізбегіндегі функцияларға жіберіледі, әр кері шақырудың нәтижесі келесі функцияға кіріс ретінде беріледі. Кейінге қалдырылғандар функция шақыруының нәтижесі бойынша оның мәні қолжетімді болмай тұрып онымен жұмыс істеуге мүмкіндік береді. Мысалы, егер кейінге қалдырылған қашықтағы тараптан IP-адресті төрттік форматта қамтитын жол ретінде алса, оны 32-биттік санға түрлендіру үшін кері шақыруды қосуға болады. Кез келген пайдаланушы енді оны 32-биттік санды қайтаратын кейінге қалдырылған деп қарастыра алады. Бұл, сондай-ақ "қателіктерді өңдеушілер" (қателіктерді өңдеуге арналған кері шақырулар) анықтау мүмкіндігі, кодқа асинхронды оқиға орын алғанда не істеу керектігін алдын ала анықтауға мүмкіндік береді, оқиғаны күтуді тоқтатпай. Оқиғаларға негізделмеген жүйелерде, мысалы, жіптерді пайдалануда, операциялық жүйе әрбір тоқтату шақырылысы жасалғанда ертерек және қосымша жүктемелерді тудырады.
Жіпті қолдау
Twisted шикі жіптердің үстінен абстракцияны қолдайды — жіпті кейінге қалдырылған дерек көзі ретінде пайдаланады. Осылайша, кейінге қалдырылған дерек бірден қайтарылады, және жіп жұмысын аяқтағанда ол мән алады. Кері шақыруларды (callbacks) қосуға болады, олар негізгі жіпте орындалады, бұл күрделі құлыптау (locking) шешімдеріне қажеттілікті жояды. Мұндай қолданыстың нақты мысалы, Twisted-тің қолдау кітапханаларынан алынған, дерекқорға шақыру үшін осы модельді пайдалану болып табылады. Дерекқорға жасалған шақыру өзге жіпте орындалса, нәтижелерді талдау негізгі жіпте жүзеге асырылады.
Сыртқы бұранданы қолдау
Twisted GTK+, Qt және Cocoa (PyObjC арқылы) сияқты басқа оқиға циклдарымен үйлесімді жұмыс істей алады. Бұл Twisted-ті графикалық пайдаланушы интерфейсі (GUI) бағдарламаларында желілік қабат ретінде қолдануға мүмкіндік береді, оның барлық кітапханаларын әр сокет үшін жеке үдеріс құрудың артық жүктемесіз пайдалануға болады, бұл Python-ның кіріктірілген кітапханасын қолданғанмен тең. Мысалы, осы модельді пайдаланып, толыққанды веб-серверді GUI бағдарламасымен бір үдерісте біріктіруге болады.