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?

Author: Makoto, 2009-06-07

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:

 9
Author: Supertux,
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.

 13
Author: Emil Ivanov,
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.

 6
Author: clemesha,
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.

 4
Author: Dustin,
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.

 2
Author: Alex Martelli,
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/

 1
Author: Flaviu,
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.

 1
Author: Denis Bilenko,
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