Django Channels - 当在 consumers.py 中循环调用 Group.send() 时,客户端仅收到一条消息

Django Channels - Client receives only one message when Group.send() is called in a loop in consumers.py

我构建了一个 Django 应用程序,它 运行 进行了自动化测试。我从用户那里收集输入,关于所有测试需要什么 运行 以及当用户单击提交按钮时,测试 运行 持续几个小时到几天(取决于选择的测试数量),所有测试完成后,结果将显示在模板上。

现在的问题是,直到所有测试都完成,用户才知道进度。所以我决定使用 Django Channles 在我获得个别测试的结果时向客户端提供实时更新。

在我的实现中,我在 for 循环中调用了 Group('user-1').send({'text': i}) 方法。但是我在模板中看到的只是最后一个 Group('user-1').send({'text': i}) operation.

的输出

根据我的要求,调用 Group('user-1').send({'text': i}) 后,模板部分中的 socket.onmessage() 函数应该收到消息并再次等待后续 Group('user-1').send({'text': i}) 调用发送的消息。

我看到了一个非常相似的问题 ,该问题已经得到解答,但该解决方案对我不起作用。请帮助我确定我的代码中需要更正的内容,如下所示。

consumers.py
------------
@channel_session_user_from_http
def ws_connect(message, **kwargs):
    http_user = message.user
    if not http_user.is_anonymous:
        message.reply_channel.send({'accept': True})
        Group('user-'+str(http_user.id)).add(message.reply_channel)

def ws_message(message):
    for i in my_results_list:
        Group('user-1').send({'text': i})
        sleep(1)

results.html
------------

 <script>
    // Note that the path doesn't matter for routing; any WebSocket
    // connection gets bumped over to WebSocket consumers

    socket = new WebSocket("ws://" + window.location.host + "/task/summary/");

    socket.onopen = function() {
        socket.send("Hello");
    }

    socket.onmessage = function(message) {
        document.getElementById("demo").innerHTML = message.data;
    }

    socket.onmessage()

    // Call onopen directly if socket is already open
    // if (socket.readyState == WebSocket.OPEN) socket.onopen();
</script>

您正在调用document.getElementById("demo").innerHTML = message.data;,每次调用都会覆盖演示的内容。你想要这样的东西:

document.getElementById("demo").innerHTML += message.data 要么 document.getElementById("demo").innerHTML += '<br />' + message.data

如果这个答案解决了您的问题,请标记为正确。