Python Comet Server
Buduję aplikację internetową, która ma kanał w czasie rzeczywistym (podobny do Facebook newsfeed), który chcę zaktualizować za pomocą mechanizmu long-ankietowania. Rozumiem, że w Pythonie, moje wybory są prawie albo użyć Stackless (budynek z ich Comet wsgi przykład) lub Cometd + Twisted. Niestety jest bardzo mało dokumentacji dotyczącej tych opcji i nie mogę znaleźć w Internecie dobrych informacji na temat użytkowników skali produkcyjnej comet na Pythonie.
Czy komuś udało się zaimplementowane w Pythonie w systemie produkcyjnym? Jak udało Ci się to zrobić i gdzie mogę znaleźć środki, aby wdrożyć własne?
7 answers
Polecam ci użyć StreamHub Comet Server - jest używany przez wiele osób - osobiście używam go z kilkoma witrynami Django, które prowadzę. Musisz napisać trochę Javy, aby obsłużyć streaming - zrobiłem to za pomocą Jython. Kod front-end to jakiś prosty Javascript a la:
StreamHub hub = new StreamHub();
hub.connect("http://myserver.com/");
hub.subscribe("newsfeed", function(sTopic, oData) { alert("new news item: " + oData.Title); });
Dokumentacja jest całkiem dobra-miałem podobne problemy, jak Ty próbowałeś zacząć z rzadkimi dokumentami Cometd et al. Na początek przeczytałbym Getting Started Z Comet i StreamHub , Pobierz i zobacz, jak działają niektóre przykłady i odwołaj się do dokumentów API, jeśli potrzebujesz:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-21 00:46:09
Orbited wydaje się być dobrym rozwiązaniem. Nie próbowałem.
Aktualizacja: rzeczy zmieniły się w ciągu ostatnich 2,5 roku.
Mamy teraz websockets we wszystkich głównych przeglądarkach, z wyjątkiem IE (oczywiście) i kilka bardzo dobrych abstrakcji nad nim, które zapewniają wiele metod emulowania komunikacji w czasie rzeczywistym.
- socket.io wraz z tornadio (socket.io 0, 6) i tornadio2 (socket.io 0.7+)
- skarpetka.JS wraz z SockJS-tornado
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-09 11:08:49
Oto w pełni funkcjonalny przykład połączenia Django, Orbited i Twisted w celu stworzenia aplikacji czasu rzeczywistego (komety): http://github.com/clemesha/hotdot używanie Pythona.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-06 20:49:39
Zrobiłem mnóstwo API używając twisted do takich rzeczy, z których większość jest dostępna na moim koncie github .
Większość jest po stronie klienta, ale slosh jest serwerem, który napisałem, aby zrobić coś w rodzaju taniej pubsub w czasie rzeczywistym. Skaluje się nieco poziomo dla odczytów, umożliwiając prostą replikację strumienia. Zapisy są trochę inne, gdy trzymasz się zwykłego HTTP, ale przepchnąłem przez to przyzwoitą kwotę na demo.
W Przeciwnym Razie masz full-on BOSH, który większość serwerów XMPP obsługuje i pozwoli Ci oddzielić dystrybucję wiadomości od nakładki webowej.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-07 04:18:34
Nie robiłem tego, ale Ten facet ma i pisze dobry artykuł o tym, z przykładami Django i wskaźnikami (których nie sprawdzałem) do innych frameworków.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-07 01:22:44
Rozwiązania orbited i redis są ładne, ale już nie istotne, gdy masz coś takiego jak PubSubHubbub, który Google wydał. Dzięki temu bardzo łatwo jest być wydawcą lub subskrybentem danego kanału. http://code.google.com/p/pubsubhubbub/
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-20 20:21:08
Oto przykład, który wykonuje długie ankiety z gevent i Django.
Używa greenlet - funkcjonalność przełączania stosów z bezstopniowego pakietu spakowanego jako rozszerzenie CPython.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-10 05:17:08