如何在同一页面上使用多个websocket?

时间:2019-05-10 23:40:17

标签: python django websocket

我最近尝试创建注释并通过websocket将其删除,并成功做到了这一点,但是当我将两者一起使用时,只有其中一个的作用类似于仅删除注释。
我已经使用多个websocket来做到这一点:

    var socket_create = 'ws://' + window.location.host + '/create_comment'
    var socket_delete = 'ws://' + window.location.host + '/delete_comment'
    var socket1 = new ReconnectingWebSocket(socket_create)
    var socket2 = new ReconnectingWebSocket(socket_delete)

1 个答案:

答案 0 :(得分:0)

嗯,我认为使用两个WebSocket实在是太过分了。您只能使用一个,并在消息级别实现create_commentdelete_comment

例如:

var crud_socket = new ReconnectingWebSocket(socket_url);

crud_socket.onmessage = function(event) {
    // Assuming here you're using json.
    var data = JSON.parse(even.data)
    action = data.action;

    if (action === 'delete') {
        // delete here ...
    }
    if action === 'create' {
       // create here ...
    }
}

记住您​​正在使用Django ...

...因此您可以遵循以下模式:

使用WebSockets通知客户端(浏览器)服务器中刚发生的某些事件,创建了对象,删除了对象,某些任务已完成,等等...

如果要执行CRUD操作,只需向Django视图发出AJAX请求。因此,遵循此模式,创建消息应如下所示:

  1. 您的javascript加载,您的Web套接字已连接。
  2. 您按一些按钮会触发对Django视图的AJAX调用。
  3. 这种Django视图接收数据并创建并保存Message的实例(或您为实现消息而实现的任何模型)。
  4. 创建消息后,信号接收器(请参阅signals)将消息发送到Web套接字。
  5. 您的js代码相应地收到该消息。

推荐:Django Channels