2

我正在使用 Django 制作一个实时网络应用程序。Django 完成了所有繁重的工作。为了使应用程序实时,当在 Django 中进行更改时,它会发布到 redis。然后我设置了一个 node.js 应用程序,它将数据从 redis 编组到 socket.io。

所以现在事情看起来像这样。

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

我可以使用 redis 并认为它很棒。我查看了gevent-socketio,但这不是我想要的。有没有办法:

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

4

3 回答 3

4

Redis 和 socket.io 不直接通信..你需要服务器,特别是如果你使用 websockets,长轮询等。

于 2012-11-24T12:39:59.177 回答
1

您可以使用django-socketio

您所做的与 Trello 类似:

http://blog.fogcreek.com/the-trello-tech-stack/

于 2012-11-24T12:49:01.990 回答
1

我们开始了一个名为bus.ionpm 的项目。它应该可以帮助你。它简化了将套接字连接到 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>

此示例演示构建消息并将其传递到服务器。默认情况下,消息将循环回发送者。“发件人”是一个演员,默认情况下,发件人会向自己发送消息。您可以自定义演员和目标。例如,您想向所有人发送消息。

在服务器上,您可以添加它以强制您的所有消息发送给每个人。

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

于 2014-07-02T17:27:13.107 回答