ajax请求canceled_ajax轮询请求现实

倦鸟归林
预计阅读时长 10 分钟
位置: 首页 知识酷 正文

精彩导读:

乐观就是那直上青天的一行白鹭,乐观就是那沉舟侧畔的万点白帆,乐观就是那鹦鹉洲头随风拂动的萋萋芳草,乐观就是化作春泥更护花的点点落红。

ajax请求canceled_ajax轮询请求现实

有许多朋友给我们发了信息询问各方面的问题,今天呆玛网将为大家来详细介绍“ajax请求canceled_ajax轮询请求现实”。希望对你们有所帮助!原创内容如下:

轮询和长轮询优缺点分析

轮询:软件定时向服务器发送Ajax请求,服务器接到请求后马上返回响应消息并关闭连接。优点:后端程序编写对比简无脑单。缺点:请求中有大半是无用,浪费带宽和服务器资源。实例:适于小型应用。

长轮询:软件向服务器发送Ajax请求,服务器接到请求后hold住连接,直到有新消息才返回响应消息并关闭连接,软件处理完响应消息后再向服务器发送新的请求。优点:在无消息的状态下不会频繁的请求。缺点:服务器hold连接会消耗资源。实例:Webqq、Hi网页版、FacebookIM。

另外,对于长连接和socket连接也有区分:

长连接:在页面里嵌入一个隐蔵iframe,将这种隐蔵iframe的src属性设为对一个长连接的请求,服务器端就能源源不停地往软件输入资料。

优点:消息马上到达,不发无用请求。

缺点:服务器保护一个长连接会增加开销。

实例:Gmail闲聊

FlashSocket:在页面中内嵌入一个使用了Socket类的Flash程序javaScript通过调用此Flash程序提供的Socket接口与服务器端的Socket接口进行通信,JavaScript在收到服务器端传送的消息后控制页面的展现。

优点:实现真正的马上通信,而不是伪马上。

缺点:软件一定安装Flash插件;非HTTP协议,无法全自动穿越防火墙。

实例:网络交互健身游戏。

轮询示例代码Flask版app.py

app.pyfromflaskimportFlask,render_template,request,jsonify

app=Flask(__name__)

USERS={

  '1':{'name':'路人甲','count':1},

  '2':{'name':'路人乙','count':0},

  '3':{'name':'路人丙','count':0},

}

@app.route('/user/list')

defuser_list():

  importtime

  returnrender_template('user_list.html',users=USERS)

@app.route('/vote',methods=['POST'])

defvote():

  uid=request.form.get('uid')

  USERS[uid]['count']+=1

  return"投票成功"

@app.route('/get/vote',methods=['GET'])

defget_vote():

  returnjsonify(USERS)

if__name__=='__main__':

  #app.run(host='127.0.0.1',threaded=True)

  app.run(threaded=True)

templates/user_list.html

  

  Title

  

  

    li{

      cursor:pointer;

    }

  

  

    {%forkey,valinusers.items()%}

      {{val.name}}({{val.count}})

    {%endfor%}

  

  

  

长轮询示例代码

Flask版

app.py

fromflaskimportFlask,render_template,request,jsonify,session

importuuid

importqueue

app=Flask(__name__)

app.secret_key='asdfasdfasd'

USERS={

  '1':{'name':'路人甲','count':1},

  '2':{'name':'路人乙','count':0},

  '3':{'name':'路人丙','count':0},

}

QUEQUE_DICT={

  #'asdfasdfasdfasdf':Queue()

}

@app.route('/user/list')

defuser_list():

  user_uuid=str(uuid.uuid4())

  QUEQUE_DICT[user_uuid]=queue.Queue()

  session['current_user_uuid']=user_uuid

  returnrender_template('user_list.html',users=USERS)

@app.route('/vote',methods=['POST'])

defvote():

  uid=request.form.get('uid')

  USERS[uid]['count']+=1

  forqinQUEQUE_DICT.values():

    q.put(USERS)

  return"投票成功"

@app.route('/get/vote',methods=['GET'])

defget_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

  exceptqueue.Empty:

    ret['status']=False

  returnjsonify(ret)

if__name__=='__main__':

  app.run(host='127.0.0.1',threaded=True)

  #app.run(threaded=True)

\templates\user_list.html

  

  Title

  

  

    li{

      cursor:pointer;

    }

  

  

    {%forkey,valinusers.items()%}

      {{val.name}}({{val.count}})

    {%endfor%}

  

  

  

以上内容就是关于“ajax请求canceled_ajax轮询请求现实”的全部内容,是由网友投稿,呆玛网小编认真整理编辑的,如果对您有帮助请收藏转发!感谢支持!

每一个成功者都有一个开始。勇于开始,才能找到成功的路。赶紧阅读下一篇!

本文来自投稿,不代表本站立场,如若转载,请注明出处:
-- 展开阅读全文 --
头像
mac常用的软件_macbook软件推荐
« 上一篇 2023-05-01
nvidia显卡怎么设置提高游戏fps_nvidia官方超频软件在哪
下一篇 » 2023-05-01
取消
微信二维码
支付宝二维码

发表评论

暂无评论,7554人围观

作者信息

似水流年

今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月

热门文章

最近发表

目录[+]