AJAX Flask POST 向所有客户端发送相同的数据

AJAX Flask POST sending same data to all clients

我正在成功获取倒计时时间数据,但是当多个客户端连接到服务器时,每个人的数据看起来都不一样。 (计时器发生故障并开始每秒跳过多次。)

如何确保不断更新的数据以相同的方式发送给所有客户端?

我的 Flask 路线。

@app.route("/countdown",methods=["POST"])
def countdown():
    countdown_second = int(get_db()["countdown"]) # get countdown second from db
    delta_t = str(datetime.timedelta(seconds=countdown_second))

    change_countdown_time(countdown_second-1) #write new countdown second to db
    
    return jsonify(delta_t),200

我的 AJAX 电话。

$('document').ready(function () {
     setInterval(function () {GET_countdown()}, 1000);
 });


function GET_countdown() {
    $.ajax({
        url: "/countdown",
        method: "POST",
        success: function(response) {
            $("#countdown").html(response);
        },
        error: function(error) {
            console.log(error);
        },
    })
  }

您的倒计时取决于客户端(您的 javascript)POST每秒倒计时。问题是每个客户端每秒都会发生一次。因此它适用于 1 个客户端,但不适用于多个客户端。

更好的方法是让您的服务器负责倒计时。你可以如何做到这一点是在你的数据库中存储一个对应于 0 的 datetime。然后每个 POST 它根据当前时间计算秒数。

@app.route("/countdown")
def countdown():

    # You might have to change things with your db to get this to work, but here is the concept.
    countdown_datetime = get_db()["countdown"] # get datetime when countdown is 0

    delta_t = (datetime.now() - countdown_datetime).total_seconds()
        
    return jsonify(delta_t),200

我也没有将它从 POST 更改为 GET,因为此端点不再更改值,它只报告它们。