使用django-websocket-redis的asynchronousDjango

我试图用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"); }; 

如何pipe理我的views.py来创build它们之间的链接? 使用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 } }); }); 

谢谢。

Django view.py和Websocket循环之间的链接是Redis消息队列。 假设在服务器上有两个独立的主循环:一个使用正常的Django请求处理程序处理HTTP请求。 另一个循环处理Websockets,与他们长期的生活联系。 既然你不能在普通的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在订阅(=侦听)的所有Websockets上发布data_for_websocket

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