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 details)

Uploaded Source

File details

Details for the file m3-pushme-0.1.5.tar.gz.

File metadata

  • Download URL: m3-pushme-0.1.5.tar.gz
  • Upload date:
  • Size: 21.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for m3-pushme-0.1.5.tar.gz
Algorithm Hash digest
SHA256 7d55902820512385d3451827f220ef3c3e521088cff0314ab9938befff1ccd89
MD5 0fe09d78fcaa8b63a9e763a0c01f6dbf
BLAKE2b-256 766b3f4a77f45eadcc70d1996bd909d2001e1626909f726a318708ae891d3500

See more details on using hashes here.

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