【问题标题】:Asynchronous Django using django-websocket-redis使用 django-websocket-redis 的异步 Django
【发布时间】:2014-06-17 01:28:34
【问题描述】:

我正在尝试使用 django-websocket-redis,即使阅读文档我也不明白它是如何工作的。 部分客户端(javascript/模板)很容易理解,但我想将数据消息从一个客户端发送到另一个客户端,我在这里阻塞..

连接每个客户端:

var ws = new WebSocket('ws://localhost:8000/ws/foobar?subscribe-group');
ws.onopen = function(e) {
        console.log("websocket connected");
    };
    ws.onclose = function(e) {
        console.log("connection closed");
    };

如何管理我的 views.py 以在它们之间创建链接? 使用 NodeJS,我使用此代码将客户端链接在一起:

io.sockets.on('connection', function (socket) {
    var data={"action": "connexion", "session_id": socket.id,};
    socket.emit('message',data);

    socket.on('message', function(socket){
        if (socket.action == "test")
        {
            io.sockets.socket(socket.code).emit('message',{"action": "move"}); 
            //the socket.code is the session_id of the client one transmitted by a form
        }
    });
});

谢谢。

【问题讨论】:

  • 从未使用过该应用程序,但 url 的 /ws/foobar 部分将通过 urls.py 链接到视图 ...在该视图中,您需要等效的 NodeJS 代码来重新发送传入消息
  • 谢谢,我会尝试这样做开始!

标签: python django node.js redis socket.io


【解决方案1】:

您的 Django view.py 和 Websocket 循环之间的链接是 Redis 消息队列。想象一下服务器上有两个独立的主循环:一个使用普通的 Django 请求处理程序处理 HTTP 请求。另一个循环处理具有长期连接的 Websocket。由于您不能在普通的 Django 请求处理程序中混合两个循环,因此您需要消息队列,以便它们可以相互通信。

因此,在您的 Django view.py 中,使用以下方式将数据发送到 websocket:

def __init__(self):
    self.redis_publisher = RedisPublisher(facility='foo', broadcast=True)

def get(self, request):
    data_for_websocket = json.dumps({'some': 'data'})
    self.redis_publisher.publish_message(RedisMessage(data_for_websocket))

这将使用 URL 在所有订阅(=监听)的 Websocket 上发布 data_for_websocket

ws://example.com/ws/foo?subscribe-broadcast

【讨论】:

  • 谢谢!这需要时间,但我明白它是如何工作的!还有两个问题:-可以通过websockets而不是AJAX请求发送这些数据,因为这种数据会非常频繁地发送,所以我不想自己进行DDOS...^^-数据交换是安全的? Websockets 受到 SSL 或其他东西的保护吗?否则,我们能保护它吗?
  • 是的,这是可能的,但我不鼓励使用它。为什么?因为您无法在服务器上触发任何作业。唯一实际的用例是在 Redis 中存储一些数据,这些数据可以随时从 Django 作业中使用,但您实际上不能使用消息队列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-16
  • 2014-03-22
  • 2015-11-14
  • 2011-07-28
  • 2011-12-27
  • 1970-01-01
相关资源
最近更新 更多