精彩导读:
乐观就是那直上青天的一行白鹭,乐观就是那沉舟侧畔的万点白帆,乐观就是那鹦鹉洲头随风拂动的萋萋芳草,乐观就是化作春泥更护花的点点落红。
有许多朋友给我们发了信息询问各方面的问题,今天呆玛网将为大家来详细介绍“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.pyapp.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轮询请求现实”的全部内容,是由网友投稿,呆玛网小编认真整理编辑的,如果对您有帮助请收藏转发!感谢支持!
每一个成功者都有一个开始。勇于开始,才能找到成功的路。赶紧阅读下一篇!
暂无评论,7547人围观