当前位置:  开发笔记 > 编程语言 > 正文

如何确保立即发送Django频道消息?

如何解决《如何确保立即发送Django频道消息?》经验,为你挑选了1个好方法。

我们的想法是在worker.connectworker 上运行后台任务.执行任务时,我希望通过通知组将其进度发送到已连接的客户端.

问题:发送到通知组的消息会延迟,直到工作人员上的任务完成.因此:在延迟5秒(sleep(5))之后,客户端上同时出现"开始"和"停止"消息.我希望消息"开始",然后是5秒延迟,然后是"停止"消息.知道为什么不是这样吗?

我运行了以下三个进程:

daphne tests.asgi:channel_layer

python manage.py runworker --exclude-channel=worker.connect

python manage.py runworker --only-channel=worker.connect

views.py:

def run(request, pk):
    Channel('worker.connect').send({'pk': pk})
    return HttpResponse(status=200)

consumers.py:

def ws_connect(message):
    Group('notifications').add(message.reply_channel)
    message.reply_channel.send({"accept": True})

def worker_connect(message):
    run_channel(message)

views.py:

def run_channel(message):
    Group('notifications').send({'text': 'Start'})
    sleep(5)
    Group('notifications').send({'text': 'Stop'})

routing.py

channel_routing = {
    'websocket.connect': consumers.ws_connect,
    'worker.connect': consumers.worker_connect,
}

小智.. 6

您可以immediately=True将该参数添加为该send函数.根据消息来源:

发送延迟到消费者完成.要覆盖它,您可以立即传递= True.

https://github.com/django/channels/blob/master/channels/channel.py#L32



1> 小智..:

您可以immediately=True将该参数添加为该send函数.根据消息来源:

发送延迟到消费者完成.要覆盖它,您可以立即传递= True.

https://github.com/django/channels/blob/master/channels/channel.py#L32

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有