Skip to main content
Help us improve Python packaging – donate today!

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

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);
}};

Release history Release notifications

This version
History Node

0.1.5

Download files

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

Filename, size & hash SHA256 hash help File type Python version Upload date
m3-pushme-0.1.5.tar.gz (21.0 kB) Copy SHA256 hash SHA256 Source None Sep 24, 2014

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging CloudAMQP CloudAMQP RabbitMQ AWS AWS Cloud computing Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page