Сервер Python Comet
-
12-09-2019 - |
Вопрос
Я создаю веб-приложение, у которого есть лента новостей в реальном времени (аналогичная ленте новостей Facebook), которую я хочу обновлять с помощью механизма длительного опроса.Я понимаю, что с Python мой выбор в значительной степени сводится к использованию Stackless (построение на основе их примера Comet wsgi) или Cometd + Twisted .К сожалению, существует очень мало документации относительно этих опций, и я не могу найти хорошую информацию в Интернете о пользователях comet в производственных масштабах на Python.
Кто-нибудь успешно внедрил comet на Python в производственной системе?Как вы это сделали и где я могу найти ресурсы для реализации своего собственного?
Решение
Я рекомендую вам использовать Кометный Сервер StreamHub - его используют многие люди - лично я использую его с парой сайтов Django, которые я запускаю.Вам нужно будет написать крошечную часть Java для обработки потоковой передачи - я сделал это с помощью Джитон.Внешний код - это какой-то действительно простой Javascript а-ля:
StreamHub hub = new StreamHub();
hub.connect("http://myserver.com/");
hub.subscribe("newsfeed", function(sTopic, oData) { alert("new news item: " + oData.Title); });
Документация довольно хорошая - у меня были похожие проблемы, когда вы пытались начать работу с редкими документами Cometd и др.Для начала я бы прочитал Начало работы с Comet и StreamHub, загрузите и посмотрите, как работают некоторые из примеров, и обратитесь к документам API, если вам нужно:
Другие советы
Находящийся на орбите кажется, это хорошее решение.Хотя я этого еще не пробовал.
Обновить:за последние 2,5 года многое изменилось.
Теперь у нас есть websockets во всех основных браузерах, кроме IE (естественно) и пара очень хороших абстракций над ним, которые предоставляют множество методов эмуляции общения в реальном времени.
- socket.io вместе с торнадио (socket.io 0.6) и торнадио 2 (socket.io 0,7+)
- sock.js вместе с Носки-торнадо
Вот полнофункциональный пример объединения Django, Orbited и Twisted для создания приложения реального времени (Comet): http://github.com/clemesha/hotdot используя Python.
Я создал тонны API, используя twisted для подобных вещей, большинство из которых доступны на моем гитхаб Учетная запись.
Большинство из них на стороне клиента, но хлюпанье это сервер, который я написал, чтобы делать что-то вроде дешевого pubsub в реальном времени.Он несколько масштабируется по горизонтали для чтения, обеспечивая простую репликацию потока.Операции записи немного отличаются, когда вы придерживаетесь обычного HTTP, но я пропустил через него приличную сумму для демонстрации.
В противном случае у вас будет полноценный BOSH, который поддерживает большинство XMPP-серверов и позволит вам отделить рассылку сообщений от веб-интерфейса.
Я этого не делал, но этот парень имеет и пишет хорошую статью об этом, с примерами Django и указателями (которые я не проверял) на другие фреймворки.
решения orbited и redis хороши, но больше не актуальны, когда у вас есть что-то вроде PubSubHubbub, выпущенного Google.Это позволяет очень легко быть издателем или подписчиком на данный канал. http://code.google.com/p/pubsubhubbub/
Вот пример, который выполняет длительный опрос с помощью gevent и Django.
Он использует зелененький - функциональность переключения стека от Stackless, упакованная в виде расширения CPython.