2012-11-02 51 views
2

我正在使用Django製作實時web應用程序。 Django完成所有繁重的工作。爲了實時製作應用程序,當在Django中進行更改時,它會發布到redis。然後,我設置了一個node.js應用程序,將數據從redis編組到socket.io。Redis到Socket.IO

所以現在看起來像這樣。

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

我使用Redis的確定,並認爲這是偉大的。我看着gevent-socketio但它不是我正在尋找。有沒有辦法:

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

回答

4

的Redis和socket.io不直接溝通..你需要在服務器之間,特別是如果你使用WebSockets,長輪詢等

1

我們啓動了一項名爲bus.io上NPM項目。它應該幫助你。它簡化了將套接字連接到pub sub並將消息分發給它們。

在服務器上。

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

在客戶端。

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

此示例演示如何構建消息並將其傳遞到服務器。默認情況下,郵件將循環回發件人。 「發件人」是演員,默認情況下,發件人將向其自身發送消息。您可以自定義actor和target。比如你想給每個人發送一條消息。

在服務器上,你可以添加這個來強制你的所有消息發給每個人。

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

或在客戶端上。

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

還有一個簡寫。

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

您還可以更改演員的分配方式,默認情況下爲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); 
}); 

消息通過總線自動從客戶端傳播到其他客戶端。總線是在redis和socket.io的基礎上構建的。

如果您有任何疑問或想一些幫助聯繫我們結賬或http://turbonetix.io在GitHub上https://github.com/turbonetix/bus.io.git

項目