Skip to main content

Подсистема доставки сообщений от сервера браузеру

Project description

## PushMe

### WTF?

**PushMe** - комплекс отправки сообщений с сервера в браузер. Состоит из:

- *Socket* клиент-сервер *SockJS-Tornado*
- Очередь передачи сообщений из *Web-сервера* в *Socket-сервер*. Очередью может выступать:

- *SnakeMQ* - pure-python реализация очереди. Хорошо подходит для разработки.

- API для добавления сообщений в очередь. Может использоваться в:

- *actions/views* *Web-сервера*
- задачах *Celery*
- различных скриптах

### Установка

Всё как обычно:

pip install pushme

### Использование

#### Настройка 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);
}};

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

m3-pushme-0.1.5.tar.gz (21.0 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page