gpt4 book ai didi

python - 使用 django-websocket-redis 的异步 Django

转载 作者:IT王子 更新时间:2023-10-29 06:10:07 27 4
gpt4 key购买 nike

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

连接每个客户端:

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

谢谢。

最佳答案

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

关于python - 使用 django-websocket-redis 的异步 Django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23392962/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com