Twisted Matrix
Из пројекта Википедија
Садржај |
[уреди] Увод
Twisted је програмерско окружење (framework) вођено догађајима (Event Driven System) за програмирање мрежних апликација у програмском језику Пајтон. Твистед, као и остале пројекте везане са њим, одржава опен сорс група програмера под заједничким именом Twisted Matrix Laboratories. Комплетно је написан у чистом Пајтону, и користи уграђени модул за рад са утичницама. Твистед подржава TCP, UDP и UNIX утичнице, а и SSL, затим многе сервер протоколе, као што суIRC, HTTP, Mail, DNS, и наравно одговарајуће клијент протоколе. Твистед се често кориштен и сигурно представља најбољи избор за прављење мрежних апликација у Пајтону.
[уреди] Делови
Твистед је једна од најјачих, стабилнијих и кориштенијих библиотека доступних за Пајтон програмски језик. Као такав, програмери из „Твистед тима“ из основног кода (чија је намјена у почетку била да се направи бесплатан game сервер) направили вишенамјенску библиотеку која се може подијелити на:
* twisted.cred, опционалан систем за аутентификацију * twisted.enterprise, асинхрон адаптер за Пајтон ДБ2.0 подршку (рад са базама) * twisted.internet, главни реактор (главна петља) * twisted.manhole, сервис за отклањање грешака * twisted.protocols, колекција популарних протокола (помагачи) * twisted.python, скуп програмерских апстракција * twisted.spread, подршка за серијализацију (маршалинг) и удаљено управљање - објект брокинг * twisted.trial, окружење за тестирање јединица * twisted.web, моћан веб сервер, упарљив са Вовен и Невов пројектима (УРАДИТИ: написати нешто више) * twisted.conch, ССЛ (Сигуран Сокет Слој) верзија 2 написан за потребе Пајтон пројеката * twisted.mail, сервер за електронску пошту (упарљив са пројектима за филтрирање писама) * twisted.words, одвојен пројекат (попут задња 3), управљање Инстант Месинџер протоколима и серверима
[уреди] Примјер Сервер Апликације
Главна особина Твистеда јесте да је реализација свих сервер и клијент протокола тежи ка томе да буде неблокирајућа. Како би се такав механизам остварио, користе се двије техникалије. 1. Као прво, користе се не блокирајуће утичнице 2. Сервер је асинхрон - дакле користи се шаблон догађаја - енглески: Event Driven System
Највећи проблем схватања функционисања асинхроног сервера стоји у разумијевању рада Деферед објекта. УРАДИТИ: Убацити код у којем се користи дефер, и наћи прави превод на Српски за ову ријеч
[уреди] Философија Твистеда
Филозофија је, укратко говорећи - слиједећа: Сервер ради, као што је речено, по принципу догађаја, асинхронизације и неблокирања. Све је ово повезано. Како? Да би твистед био без блокирања, све функције које се позивају морају се извршити одмах, како не би заустављали нит у којој се код извршава. Да би се позвана функција одмах извршила, потребна је асинхронизација њеног резултата и ту се користи деферед систем, а да би операције са утичницама могле да дају деферед резултате без употреба нових нити (трединг), рад са утичницама мора бити неблокирајући. Тако то све зависи једно од другог и представља веома логичну цјелину. Дакле, резултати враћају објекат деферед који је познат и „оном ко тражи услугу“ и „оном ко нуди услугу“. Када неко затражи услугу (позове функцију), он смјеста добија деферед објекат који ће активирати „повратни позив“ чим га о томе обавијести „онај ко нуди услугу“.
Наставак филозофије: Програмери твистеда кажу да је кориштење нити у програмирању интернета за лоше програмере. Кажу - Твистед је „стејт машин“. Што и није баш сасвим јасно, јер је у једном дијелу документације спецификовано да не блокирајући сервер може бити један од три : а) Вишенитни б) Вођен догађајима в) Стејт машине (машина стања) . Прва два система су веома слична, разлика је у томе што се у другом систем брине о вишенитности (позивање сваког догађаја отвара нову нит). Твистед је типа „в)“. Конфузија је у томе што се у твистеду нонстоп користе деферед резултати који јесу догађаји, али када се сагледа са аспекта цјелине, твистед је ипак в) а не б) јер се о догађајима не брине систем, нити се отварају нове нити, већ се користе не блокирајуће функције. Друга конфузија се тиче проблема нити. Многи људи (кажу тако на твистедовом ирц каналу) се забуне и помисле да дефер објекти претварају њихове блокирајуће функције у неблокирајуће. Не. Функције које су блокирајуће по својој природи (интензиван рад, нпр, операције са фајловима) тј не чине саставни дио твистеда и његовог управљања утичницама, остају блокирајуће и када се умотају у дефер објекат. Оно што дефер објекат омогућава јесте: 1) управљање неблокирајућим функцијама које чине твистед оквир за рад 2) управљање блокирајућим функцијама које раде у одвојеној нити. Дакле, друга конфузија састоји се од тога да се на први поглед чини да је твистед ипак већином а) него в) али опет, као и у претходном случају, када се сагледа цјелина и њено језгро, види се да твистед (он сам) нема додира са вишенитним дизајном. Ипак, програмерима се ставља могућност да на лаган и остатку сервера разумљив начин употпуне свој пројекат са вишенитним дизајном.
[уреди] Клијент Апликација
УРАДИТИ: Ставити неку једноставну клијент апликацију и објаснити функционисање клијент протокола