Package: djazator
djazator========`djazator`_ is a simple django plugin for sending push messages fromdjango server to sockjs clients. It internally uses `zeromq`_ and`sockjs-tornado`_. djazator can send push notifications to all sockjsclients and to subset of this clients.Requirements:-------------1. `pyzmq`_>=2.02. `sockjs-tornado`_>=0.0.53. `django`_>=1.4Installation:-------------Install ``djazator`` with your favorite Python package manager:::pip install djazatorAdd ``djazator`` to your ``INSTALLED_APPS`` in ``settings.py``::INSTALLED_APPS = ('django.contrib.auth','djazator',...)Define ``DJAZATOR_MQ_SOCKET`` in ``settings.py``::DJAZATOR_MQ_SOCKET = 'tcp://127.0.0.1:8002'Usage:------Run zeromq forwarder device::djazator-mq --sub=tcp://127.0.0.1:8002 --pub=tcp://127.0.0.1:8001Run sockjs-tornado server::djazator-server --port=8080 --mq_socket=tcp://127.0.0.1:8001 --route=/sockjs --address=''Alternatively, if you don't need multiple tornado instances support, you can entirely omit djazator-mq and should pass -S/--single argument to djazator-server::djazator-server --single --port=8080 --mq_socket=tcp://127.0.0.1:8002 --route=/sockjs --address=''Append sockjs client library to your page::<head><script src="http://cdn.sockjs.org/sockjs-0.3.min.js">...Open page in browser and connect to sockjs-tornado server::conn = new SockJS('http://localhost:8080/sockjs')Define a callback for incoming messages::conn.onmessage = function (e){ console.log(e.data); };Send a message from django::from djazator.pub import notify_allnotify_all({'msg': u'Hi all!'})and you will see it in js console::Object {msg: "Hi all!"}Advanced notifications:-----------------------You can send notifications to subset of users.::from djazator.pub import notifyfrom djazator.utils import tokenizefrom django.contrib.auth.models import Useruser = User.objects.get(email='djazator@mail.com')notify({'msg': u'Hi, %s!' % user.username}, users=[user])token = tokenize(user)notify({'msg': u'Hi user with token %s !' % token}, users=[user])To get this messages you need to subscribe by token::var token = {% djazator_token %};SockJS.prototype.emit = function (name, data) { // wrapper around SockJS.send for djazator's protocol supportvar meta_dict = {name:name,data:data};this.send(JSON.stringify(meta_dict))};conn = new SockJS('http://localhost:8080/sockjs')conn.emit('subscribe', {'token': token});conn.onmessage = function (e){ console.log(e.data); };``{% djazator_token %}`` is nothing more than a wrapper around``djazator.utils.tokenize`` that returns user.id signed withstandart django singing mechanism. You can configure you own salt by setting``DJAZATOR_SALT`` in ``settings.py``. If you need more security,you can provide your own tokenization function. It should accept django Userobject and return token. Add path to this function in settings.py .::DJAZATOR_TOKENIZER = 'path.to.my.func'Conclusions:------------1. djazator serializes datetime objects with ISO 8601 format. You can parse it on client with `moment.js`_ .2. djazator server can handle client's messages constructed only in some specific way and can't be used for client to client communications.Production:-----------1. `Hipache`_.. _djazator: https://github.com/mike-grayhat/djazator.. _zeromq: http://www.zeromq.org/.. _moment.js: http://momentjs.com/.. _sockjs-tornado: https://github.com/mrjoes/sockjs-tornado.. _pyzmq: https://github.com/zeromq/pyzmq.. _django: https://www.djangoproject.com/.. _Hipache: https://github.com/dotcloud/hipache