Подсистема доставки сообщений от сервера браузеру
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);
}};
### 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
Release history Release notifications | RSS feed
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)
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7d55902820512385d3451827f220ef3c3e521088cff0314ab9938befff1ccd89 |
|
MD5 | 0fe09d78fcaa8b63a9e763a0c01f6dbf |
|
BLAKE2b-256 | 766b3f4a77f45eadcc70d1996bd909d2001e1626909f726a318708ae891d3500 |