Python 使用Django websocket redis的异步Django

Python 使用Django websocket redis的异步Django,python,django,node.js,redis,socket.io,Python,Django,Node.js,Redis,Socket.io,我正在尝试使用django websocket redis,但我甚至在阅读文档时都不明白它是如何工作的。。 部分客户端(javascript/模板)很容易理解,但我想将数据消息从一个客户端发送到另一个客户端,我在这里阻止 连接每个客户端: var ws = new WebSocket('ws://localhost:8000/ws/foobar?subscribe-group'); ws.onopen = function(e) { console.log("websocket

我正在尝试使用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");
    };
如何管理my 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
        }
    });
});

谢谢。

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(=侦听)上发布websocket的数据:

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

从未使用过该应用程序,但url的
/ws/foobar
部分将通过
urls.py
链接到一个视图…在该视图中,您需要相当于您的NodeJS代码来重新发送传入消息谢谢我将尝试这样做开始!谢谢这需要时间,但我知道它是如何工作的!还有两个问题:-可以通过WebSocket发送此数据,而不使用AJAX请求,因为此类数据将非常频繁地发送,所以我自己不想DDOS…^-数据交换是否安全?WebSocket是用SSL或其他东西保护的吗?否则,我们能保证它的安全吗?是的,这是可能的,但我不鼓励使用它。为什么?因为你不能在服务器上触发任何作业。唯一实用的用例是在Redis中存储一些数据,这些数据在任何时候都可以从Django作业中使用,但实际上您不能使用消息队列。