2009-09-11 8 views
14

Potrzebuję pomocy w zrozumieniu korzyści płynącej z używania struktury asynch. Załóżmy, że chcę stworzyć prostą aplikację internetową do czatu. Dlaczego nie mogę napisać kodu Pythona w frameworku Django, który wykonuje długi polling, w którym nie wysyłam odpowiedzi z powrotem do serwera, dopóki ktoś nie wprowadzi nowego msg. Co zapewnia Twisted, która zapewnia korzyści dla aplikacji działających w czasie rzeczywistym, takich jak aplikacja do czatowania?Skręcona (serwer asynchroniczny) kontra Django (lub jakikolwiek inny framework)

Przepraszam, że jestem oczywiście trochę zdezorientowany co do potrzeby asynchronicznego środowiska.

Odpowiedz

16

Serwery asynchroniczne obsługują znacznie większą liczbę równoczesnych połączeń klienckich. Więcej konwencjonalnych serwerów napotyka ograniczenia wątków i procesów podczas obsługi dużej liczby współbieżnych klientów, szczególnie tych z długotrwałymi połączeniami. Serwery asynchroniczne mogą również zapewnić lepszą wydajność, ponieważ pozwalają uniknąć narzutów na przykład przełączanie kontekstu wątku.

Oprócz ramach Twisted istnieją również bloki budowlane asynchroniczny serwer w standardowej biblioteki Pythona: poprzednio asyncore i asynchat, ale teraz także asyncio.

18

Po pierwsze Django to framework do pisania aplikacji internetowych, który zapewnia ORM, szablonowanie HTML, wymaga uruchomienia serwera http itp. Twisted pomaga napisać znacznie niższy kod niż ten. Możesz użyć skrętu, aby napisać serwer http Django działa. Jeśli używasz Django, jesteś ograniczony do modelu http, ze skręceniem może komunikować się z dowolnym protokołem, który ci się podoba, włączając w to protokoły push. W związku z tym na przykładowym czacie otrzymujesz serwer, który lepiej się skaluje, ponieważ może przekazywać komentarze osobom, które zalogowały się w VS z django, z których każdy klient musiał wielokrotnie sondować.

edytowane w celu odzwierciedlenia komentarzy: SOS-skyl

+0

Niezupełnie prawdziwe; Django wykonuje synchroniczne wywołania IO, dlatego jest OR. – Henrik

+0

Nie skupia się na asynchronicznym tak bardzo, jak wygląda na stosie. Z Django jest to serwer WWW, implementacja WSGI, Django, mój kod. Z Twisted to Twisted, mój kod. Używając skręconego można napisać serwer WWW, serwer XMPP, serwer IRC. Dzięki Django wiele z tej elastyczności już nie obowiązuje, dlatego jesteś protokołem HTTP. – stonemetal

0

Można użyć WHIFF zamiast albo :). Sprawdź http://aaron.oirt.rutgers.edu/myapp/gfChat/nucularChatRoom , która używa pętli odpytywania javascript z jsonem, aby sprawdzić dla aktualizacji serwera. Prawdopodobnie mógłbyś zrobić coś podobnego w Django w wersji , ale nie wiem jak to się stało, ponieważ zrezygnowałem z Django.

btw: Mam nadzieję, że przeniesienie tego demo do silnika aplikacji Google jako bardziej kompletnej usługi, gdy moje życie trochę uspokaja.

+0

Jeśli używasz skręconego, możesz użyć twisted.orbited, aby przekazać aktualizacje z serwera do klientów javascript działających w przeglądarce –

0

Jeśli chcesz przyjrzeć się jakimś źródłom do integracji Twisted i Django, spójrz na Yardbird.

3

W skręcie można zaimplementować własne protokoły. Django na pewno nie może tego zrobić.

5

Największą zaletą dla mnie jest to, że Twisted daje mi aplikację, która ma stan i może komunikować się z wieloma różnymi klientami za pomocą wielu protokołów.

Dla mnie mój skręcony serwer komunikuje się z wieloma czujnikami zainstalowanymi w domach i firmach monitorujących zużycie energii. Przechowuje dane i zachowuje najnowsze dane i stan w poręcznych klasach python w pamięci. Żądania za pośrednictwem xmlrpc od django otrzymują ten stan i mogą przedstawiać ostatnie dane użytkownikowi. Moje rzeczy w Gridspy są wciąż rozwijane, więc faktyczna strona na your.gridspy.co.nz jest nieco pre-alpha.

Najlepsze jest to, że potrzebujesz zaskakująco małego kodu, aby stworzyć wydajny serwer. Wykonano niesamowitą ilość pracy.

Powiązane problemy