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,因为此端点不再更改值,它只报告它们。
我正在成功获取倒计时时间数据,但是当多个客户端连接到服务器时,每个人的数据看起来都不一样。 (计时器发生故障并开始每秒跳过多次。)
如何确保不断更新的数据以相同的方式发送给所有客户端?
我的 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,因为此端点不再更改值,它只报告它们。