轮询是每隔多久的时间请求一次
长轮询是请求到来就夯住,并设置超时时间,有值就瞬间返回。
from flask import Flask, render_template, session, request, jsonify import queue import uuid app = Flask(__name__) app.secret_key = str(uuid.uuid4()) USERS = { '1': {'name': '小黑', 'count': 1}, '2': {'name': '小胖', 'count': 0}, '3': {'name': '小铁锤', 'count': 0}, } QUEUE_DICT = { # 'uuid': Queue()队列 格式 } @app.route("/user/list") def user_list(): user_uuid = str(uuid.uuid4()) # 生成用户随机字符串 QUEUE_DICT[user_uuid] = queue.Queue() # 引用队列消息 session["current_user_uuid"] = user_uuid # session存放uuid字符串 return render_template("user_list.html", users=USERS) @app.route("/vote", methods=["POST"]) def vote(): uid = request.form.get('uid') # 获取uuid值 USERS[uid]['count'] += 1 # 让字典中的值自增 for q in QUEUE_DICT.values(): # 循环获取队列中的值并添加到USERS q.put(USERS) return "投票成功" @app.route("/get/vote", methods=["get"]) def get_vote(): user_uuid = session["current_user_uuid"] # 获取session中的存储的uuid值 q = QUEUE_DICT[user_uuid] # 获取字典中uuid对应的Q() ret = {"status": True, "data": None} # 返回状态码 try: users = q.get(timeout=5) # 异常就夯(hang)住5秒 ret["data"] = users except queue.Empty: ret["status"] = False return jsonify(ret)