gothy / pusher

old stuff: push service in python

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Unite Pusher

###What for? Pusher является зависимостью только для uni_mail в настоящий момент. В будущем планировалось, чтобы он стал основой для всех realtime-нотификаций в unite, таких как новые чаты, новые сообщения в них, аплоады фоток друзьями и т.п.

Прототипный веб-интерфейс uni_mail использует Pusher для получения нотификаций в пользовательских личных сообщениях.

###How's it work? Pusher по сути представляет из себя легковесный неблокирующий веб-сервер, построенный на базе tornadio( https://github.com/MrJoes/tornadio ) comet framework c ioloop из TornadoWeb( http://www.tornadoweb.org/ ) в своем ядре.
IMPORTANT: сейчас tornadio считается устаревшим, лучше перейти на вторую версию этого фреймворка https://github.com/MrJoes/tornadio2 , ориентированную на использование в связке с Socket.IO > 0.7 на стороне браузера.

Pusher устанавливает соединение с RabbitMQ на старке и начинает "слушать" события в очереди сообщений.
Каждый веб-клиент, который хочет получать нотификации в реальном времени может подключиться к нему с помощью клиентской части socket.io (http://socket.io/), который умеет работать в разных режимах (like websocket, flashsocket, xhr-multipart, xhr-polling).
Для каждого подключенного клиента, в качестве главного ориентира для доставки сообщений используется username(uni_passport profile_id). Этот параметр используется как routing key, который добавляется к "прослушивающимся" в очереди сообщений RabbitMQ.

Для примера: пользователь "gothy" подключается, Pusher добавляет "gothy" в список routing keys, для которых он хочет получать сообщения. Когда приходит событие, pusher поднимает мета-информацию по событию и посылает команду соответствующему клиенту(см. метод on_message() в Notipikator).
При отключении клиента - pusher перестает слушать события, связанные с этим пользователем, удаляя его username из интересующих его routing keys в очереди сообщений.
По сути pusher работает как роутер для нотификаций, отправляемых пользователю.

About

old stuff: push service in python


Languages

Language:Python 100.0%