PushMe документация¶
Содержание:
Tutorial¶
PushMe - комплекс отправки сообщений с сервера в браузер. Состоит из:
Socket клиент-сервер SockJS-Tornado
Очередь передачи сообщений из Web-сервера в Socket-сервер. Очередью может выступать:
- SnakeMQ - pure-python реализация очереди. Хорошо подходит для разработки.
API для добавления сообщений в очередь. Может использоваться в:
- actions/views Web-сервера
- задачах Celery
- различных скриптах
Использование¶
Настройка Tornado и очереди сообщений¶
Сервер Tornado запускается командой:
python -m pushme.server [options]
Сервер очереди сообщений запускается командой:
python -m pushme.queue [options]
Опции можно посмотреть как обычно - указав ключ --help.
--mq-host/--mq-port для торнадо, это хост и порт очереди сообщений.
Если ничего не указывать ни для того, ни для другого сервера, то очередь запустится на localhost:4000, оттуда же будет получать сообщения Tornado и туде же нужно будет посылать сообшения из API, сам же Tornado будет слушать запросы от браузеров на localhost:9999.
Настройка сервера приложений¶
В основном шаблоне добавляется статика:
<!-- sockJS -->
<script type='text/javascript' src='{{ STATIC_URL }}sockjs-0.3.min.js'></script>
<script type='text/javascript' src='{{ STATIC_URL }}pushme.js'></script>
Где-нибудь в обработчике загрузки страницы создаётся соединение:
Ext.onReady(function(){
...
//
pushMeConnection.connect(
'http://localhost', // хост, на котором запущен Tornado
9999, // порт, который слушает Tornado
123 // id текущего пользователя
);
});
id пользователя нужен для отправки этому пользователю сообщений, и должен быть уникатьным!
В проекте в settings.INSTALLED_APPS добавляется приложение:
'pushme',
Использование API¶
На сервере:
from pushme.mq import get_sender
sender = get_sender(
'snakemq', # backend очереди сообщений
('localhost', 4000) # сокет очереди сообщений
)
sender.send(
data='Hello!', # собственно, сообщение
uid=123, # uid пользователя, None для сообщения всем
topic='ping' # topic сообщения (м.б. None)
)
На клиентской стороне:
// подписка на сообщения
var callbackId = pushMeConnection.subscribe(
function(msg) {
console.log(msg);
},
'ping' // topic, по которому будут фильтроваться соощения
);
...
// отписка от сообщений
pushMeConnection.unsubscribe(callbackId);
Если topic для подписчика не указан, то подписчик будет получать все сообщения. Все подписчики получают topic вторым параметром. Пример подписчка, получающего все сообщения:
var fanout = pushMeConnection.subscribe(
function(msg, topic) {
console.log(topic, ':', msg);
}};
API Reference¶
pushme package¶
Subpackages¶
pushme.demo package¶
Submodules¶
pushme.demo.actions module¶
- class pushme.demo.actions.Pack[исходный код]¶
Базовые классы: objectpack.actions.BasePack
- add_to_desktop = True¶
- get_default_action()[исходный код]¶
- title = u'PushMe'¶
- class pushme.demo.actions.SendAction[исходный код]¶
Базовые классы: objectpack.actions.BaseAction
- run(request, context)[исходный код]¶
- class pushme.demo.actions.WindowAction[исходный код]¶
Базовые классы: objectpack.actions.BaseWindowAction
- create_window()[исходный код]¶
- set_window_params()[исходный код]¶
pushme.demo.app_meta module¶
- pushme.demo.app_meta.register_actions()[исходный код]¶
pushme.demo.ui module¶
- class pushme.demo.ui.MsgWindow[исходный код]¶
Базовые классы: objectpack.ui.BaseWindow
- set_params(params)[исходный код]¶
Module contents¶
pushme.mq package¶
Submodules¶
pushme.mq.backend_snakemq module¶
Очередь на базе snakeMQ. Подходит для использования на машинах разработчиков, т.к. является pure-python.
- class pushme.mq.backend_snakemq.Queue(*args, **kwargs)[исходный код]¶
Базовые классы: pushme.mq.interface.Queue
Простой сервер очереди на ОДНОГО получателя и несколько отправителей
- run()[исходный код]¶
- class pushme.mq.backend_snakemq.Receiver(*args, **kwargs)[исходный код]¶
Базовые классы: pushme.mq.interface.Receiver
Простой получатель. В данной реализации очереди может быть ТОЛЬКО ОДИН получатель!
- loop_timeout = 0.1¶
- process()[исходный код]¶
- class pushme.mq.backend_snakemq.Sender(*args, **kwargs)[исходный код]¶
Базовые классы: pushme.mq.interface.Sender
Простой отправитель.
- loop_len = 2¶
- loop_timeout = 0.02¶
- msg_ttl = 500¶
- send(data, uid=None, topic=None)[исходный код]¶
Отправляет сообщение получателю посредством очереди :uid :: int - id socket-соединения :topic - тема сообщения :data - данные для отправки
pushme.mq.interface module¶
Базовые классы для queue backends
- class pushme.mq.interface.Queue(addr, quiet=False)[исходный код]¶
Базовые классы: object
Сервер очереди
- run()[исходный код]¶
- class pushme.mq.interface.Receiver(ident, queue_addr, quiet=False)[исходный код]¶
Базовые классы: pushme.mq.interface._Client
Клиент-получатель
- static callback(uid, topic, data)¶
Умолчательный обработчик получения сообщений
- process()[исходный код]¶
Производит получение сообщений (это callback для асинхронного ядра tornado)
- class pushme.mq.interface.Sender(ident, queue_addr, quiet=False)[исходный код]¶
Базовые классы: pushme.mq.interface._Client
Клиент-отправитель
- send(data, uid=None, topic=None)[исходный код]¶
Отправляет сообщение получателю посредством очереди :uid :: int - id socket-соединения :topic - тема сообщения :data - данные для отправки
Module contents¶
Очередь сообщений. Предоставляет единый интерфейс для различных реализаций очередей.
- pushme.mq.get_queue(backend, *args, **kwargs)[исходный код]¶
Возвращает реализацию сервера очереди :backend - имя конкретной реализации очереди
- pushme.mq.get_receiver(backend, *args, **kwargs)[исходный код]¶
Возвращает реализацию клиента - получателя сообщений :backend - имя конкретной реализации очереди
- pushme.mq.get_sender(backend, *args, **kwargs)[исходный код]¶
Возвращает реализацию клиента - отправителя сообщений :backend - имя конкретной реализации очереди
Submodules¶
pushme.client module¶
CLI-программа, демонстрирующая API отправки сообщений
pushme.options module¶
Подсистема наcтройки компонент через ком.строку
- pushme.options.configure(prog, options, **defaults)[исходный код]¶
Возвращает парсер ключей ком.строки для компоненты
pushme.queue module¶
Сервер очереди сообщений на отправку
pushme.server module¶
- class pushme.server.PushConnection(session)[исходный код]¶
Базовые классы: sockjs.tornado.conn.SockJSConnection
SockJS-соединение для отправки сообщений в браузер
- on_close()[исходный код]¶
- on_message(msg)[исходный код]¶
- on_open(request)[исходный код]¶
- pushme.server.receive_callback(uid, topic, data)[исходный код]¶
callback, обрабатывающий сообщения из очереди
Module contents¶
Система отправки сообщений от сервера в браузер