Python 使用Django websocket redis的异步Django
我正在尝试使用django websocket redis,但我甚至在阅读文档时都不明白它是如何工作的。。 部分客户端(javascript/模板)很容易理解,但我想将数据消息从一个客户端发送到另一个客户端,我在这里阻止 连接每个客户端: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
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请求处理程序中混合使用这两个循环,因此需要消息队列,以便它们可以相互通信
因此,在Djangoview.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作业中使用,但实际上您不能使用消息队列。