【问题标题】:How to create a server side timer/countdown in Django Channels?如何在 Django Channels 中创建服务器端计时器/倒计时?
【发布时间】:2021-01-29 21:24:32
【问题描述】:

假设我正在使用 Django Channels (Websockets) 构建一个 pub-quiz 应用程序。有 10 个问题,每个问题都有时间限制和一个按钮来增加额外的 5 秒。

我知道有可能在客户端设置计时器,但我需要将它设置在服务器端以避免篡改 Js 导致问题,因为涉及的玩家很多。

如何在 Django 中创建服务器端的计时器?一旦计时器到了,它就需要调用一个函数来获取下一个问题。我会知道如何使用 while 循环来做到这一点:

    While True:
        if datetime.now() == question_end_time:
             fetch_next_question()

但是从我读到的内容来看,由于阻塞线程,这似乎不是一个好主意。如果问题的时间到了,有没有其他方法可以每秒检查一次,调用一个函数?

提前致谢。

【问题讨论】:

    标签: python django websocket python-asyncio


    【解决方案1】:

    换一种方式怎么样,而不是每秒检查一次,而是设置在计时器结束时发生一些事情。

    使用javascript创建一个计时器,当计时器结束时,javascript会调用django url,使用ajax。

    这样你就不会每秒钟都在监控。

    【讨论】:

    • 感谢您的回复。但是,出于几个原因,我想避免将客户端用于计数器,而是希望以某种方式使用后端(Celery 可能是一个不错的选择,即使对于重复的 1 秒任务?)
    猜你喜欢
    • 2012-02-13
    • 2013-07-17
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 2019-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多