2012-11-02 4 views
2

Je crée une application Web en temps réel avec Django. Django fait tout le gros du travail. Pour rendre l'application en temps réel, lorsqu'une modification est effectuée dans Django, elle est publiée dans redis. J'ai ensuite mis en place une application node.js qui rassemble les données de redis à socket.io.Redis to Socket.IO

Donc maintenant les choses ressemblent à ceci.

Django -> Redis -> Node.js -> Socket.IO -> Browser

Je suis OK avec l'aide Redis et je pense qu'il est grand. J'ai regardé dans gevent-socketio mais ce n'est pas ce que je cherche. Y a-t-il un moyen de le faire:

Django -> Redis -> Socket.IO -> Browser?

Répondre

4

Redis et socket.io ne communiquent pas directement .. vous avez besoin serveur entre les deux, surtout si vous utilisez websockets, long polling etc.

1

Nous avons commencé un projet appelé bus.io sur NPM. Cela devrait t'aider. Il simplifie la connexion des sockets à un sous-pub et leur distribue des messages.

Sur le serveur.

var express = require('express') 
var app = express(); 
app.use(express.static(__dirname+'/public')); 

var server = require('http').Server(app).listen(3000); 

var bus = require('bus.io')(server); 

Sur le client.

<script type="text/javascript src="/bus.io/bus.io.js"> 
    var sock = io.connect(); 
    sock.on('connect', function() { 
    sock.message().action('say').content('hello').deliver(); 
    }); 
    sock.on('say', function (msg) { 
    console.log(msg.content()); 
    }); 
</script> 

Cet exemple illustre la création d'un message et sa remise au serveur. Par défaut, le message retournera à l'expéditeur. Un "expéditeur" est un acteur et par défaut un expéditeur va envoyer un message à lui-même. Vous pouvez personnaliser l'acteur et la cible. Donc, par exemple, vous vouliez envoyer un message à tout le monde.

Sur le serveur, vous pouvez ajouter ceci pour forcer tous vos messages à aller à tout le monde.

sock.in(function (msg, sock, next) { 
    msg.target('everyone').deliver(); 
}); 

Ou sur le client.

sock.message().target('everyone').action('say').content('hello').deliver(); 

Il existe également un raccourci.

sock.message({target:'everyone', action:'say', content:'hello'}).deliver(); 

Vous pouvez également modifier la façon dont l'acteur est attribué, par défaut, il est le socket.id.

bus.actor(function (sock, cb) { 
    //so if you had a session you could get the user name from the session 
    cb(null, sock.handshake.session.user); 
}); 

Les messages sont automatiquement propagés du client à d'autres clients via le bus. Le bus est construit sur redis et socket.io.

Si vous avez des questions ou si vous souhaitez une caisse de contact d'aide notre http://turbonetix.io ou le projet sur github https://github.com/turbonetix/bus.io.git

Questions connexes