python 轮询,长轮询

Posted huay

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 轮询,长轮询相关的知识,希望对你有一定的参考价值。

轮询相关

用于消息和投票等

轮询

1.采用js 定时请求。

html

技术图片
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        li
            cursor: pointer;
        
    </style>
</head>
<body>
    <ul id="userList">
        % for key,val in users.items() %
            <li uid="key">val.name (val.count)</li>
        % endfor %
    </ul>

    <script src="https://cdn.bootcss.com/jquery/3.3.0/jquery.min.js"></script>
    <script>

        $(function () 
            $(#userList).on(dblclick,li,function () 
                var uid = $(this).attr(uid);
                $.ajax(
                    url:/vote,
                    type:POST,
                    data:uid:uid,
                    success:function (arg) 
                        console.log(arg);
                    
                )
            );

        );


        /*
        获取投票信息
         */
        function get_vote() 
            $.ajax(
                url:/get/vote,
                type:"GET",
                dataType:JSON,
                success:function (arg) 
                    $(#userList).empty();
                    $.each(arg,function (k,v) 
                        var li = document.createElement(li);
                        li.setAttribute(uid,k);
                        li.innerText = v.name + "(" + v.count + ) ;
                        $(#userList).append(li);
                    )

                
            )
        


        setInterval(get_vote,3000);

    </script>
</body>
</html>
View Code

python

技术图片
from flask import Flask,render_template,request,jsonify


app = Flask(__name__)


USERS = 
    1:name:jack,count:1,
    2:name:rose,count:0,
    3:name:anner,count:0,


@app.route(/user/list)
def user_list():
    import time
    return render_template(user_list.html,users=USERS)

@app.route(/vote,methods=[POST])
def vote():
    uid = request.form.get(uid)
    USERS[uid][count] += 1
    return "投票成功"

@app.route(/get/vote,methods=[GET])
def get_vote():

    return jsonify(USERS)


if __name__ == __main__:
    # app.run(host=‘192.168.13.253‘,threaded=True)
    app.run(threaded=True)
View Code

长轮询

1.采用队列,递归,多线程实现。

html

技术图片
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <style>
        li
            cursor: pointer;
        
    </style>
</head>
<body>
    <ul id="userList">
        % for key,val in users.items() %
            <li uid="key">val.name (val.count)</li>
        % endfor %
    </ul>

    <script src="https://cdn.bootcss.com/jquery/3.3.0/jquery.min.js"></script>
    <script>

        $(function () 
            $(#userList).on(click,li,function () 
                var uid = $(this).attr(uid);
                $.ajax(
                    url:/vote,
                    type:POST,
                    data:uid:uid,
                    success:function (arg) 
                        console.log(arg);
                    
                )
            );
            get_vote();
        );

        /*
        获取投票信息
         */
        function get_vote() 
            $.ajax(
                url:/get/vote,
                type:"GET",
                dataType:JSON,
                success:function (arg) 
                    if(arg.status)
                        $(#userList).empty();
                            $.each(arg.data,function (k,v) 
                                var li = document.createElement(li);
                                li.setAttribute(uid,k);
                                li.innerText = v.name + "(" + v.count + ) ;
                                $(#userList).append(li);
                            )
                    
                    get_vote();

                
            )
        

    </script>
</body>
</html>
View Code

python

技术图片
from flask import Flask,render_template,request,jsonify,session
import uuid
import queue

app = Flask(__name__)
app.secret_key = asdfasdfasd


USERS = 
    1:name:jack,count:1,
    2:name:rose,count:0,
    3:name:anner,count:0,


QUEQUE_DICT = 
    # ‘asdfasdfasdfasdf‘:Queue()


@app.route(/user/list)
def user_list():
    user_uuid = str(uuid.uuid4())
    QUEQUE_DICT[user_uuid] = queue.Queue()

    session[current_user_uuid] = user_uuid
    return render_template(user_list.html,users=USERS)

@app.route(/vote,methods=[POST])
def vote():
    uid = request.form.get(uid)
    USERS[uid][count] += 1
    for q in QUEQUE_DICT.values():
        q.put(USERS)
    return "投票成功"


@app.route(/get/vote,methods=[GET])
def get_vote():
    user_uuid = session[current_user_uuid]
    q = QUEQUE_DICT[user_uuid]

    ret = status:True,data:None
    try:
        users = q.get(timeout=5)
        ret[data] = users
    except queue.Empty:
        ret[status] = False

    return jsonify(ret)



if __name__ == __main__:
    app.run(host=192.168.3.10,threaded=True)
    # app.run(threaded=True)
View Code

 

以上是关于python 轮询,长轮询的主要内容,如果未能解决你的问题,请参考以下文章

轮询长轮询长连接socket连接WebSocket

轮询长轮询长连接socket连接WebSocket

短连接长连接和短轮询长轮询

轮询长轮询和websocket

轮询长轮询和websocket

轮询长轮询comet长连接SSEwebsocket