"""
輪詢即輪番詢問
讓瀏覽器定時(例如每隔5s中傳送一次)通過ajax偷偷滴朝服務端傳送請求獲取資料
不足之處
訊息延遲
請求次數過多 損耗資源嚴重
效率低 基本不用
"""
"""
優點:在無訊息的情況下不會頻繁的請求,耗費資源小。
缺點:伺服器hold連線會消耗資源,返回資料順序無保證,難於管理維護。
"""
# 長輪詢實現聊天室功能
url(r'^home/$',views.home),
url(r'^send_msg/$',views.send_msg),
url(r'^get_msg/$',views.get_msg)
# 定義乙個儲存使用者佇列的字典
q_dict = {} #
def home(request):
# 獲取自定義的唯一標示
name = request.get.get('name')
# 給每個使用者生成乙個對應的佇列物件
q_dict[name] = queue.queue()
return render(request,'home.html',locals())
def send_msg(request):
if request.method == 'post':
# 獲取使用者輸入的內容
msg = request.post.get('msg')
# 將該訊息給所有的佇列傳送乙份
for q in q_dict.values(): # 迴圈獲取所有客戶端瀏覽器對應的佇列物件
# 獲取使用者唯一標示 去使用者自己對應的佇列中獲取資料並非返回
name = request.get.get('name')
# 去全域性字典中獲取對應的佇列
q = q_dict.get(name)
# ajax互動一般用的都是字典格式
back_dic =
# 異常處理 獲取佇列中的資料
try:
data = q.get(timeout=10) # 等10s
back_dic['msg'] = data
except queue.empty as e:
# 將狀態改為false 然後讓瀏覽器再來要資料
back_dic['status'] = false
return jsonresponse(back_dic)
傳送
輪詢與長輪詢
資料互動有兩種模式 push 推模式 pull 拉模式 1 推模式指的是客戶端與服務端建立好網路長連線,服務方有相關資料,直接通過長連線通道推送到客戶端。1 優點 及時,一旦有資料變更,客戶端立馬能感知到 另外對客戶端來說邏輯簡單,不需要關心有無資料這些邏輯處理。2 缺點 不知道客戶端的資料消費能力...
輪詢 長輪詢
輪詢 通過setinterval向後台請求資料,更新html from flask import flask,render template,request,jsonify users 2 3 user list defuser list import time return render temp...
輪詢,長輪詢,Websocket
原理 利用ajax定時朝後端傳送請求,比如每隔五秒鐘發一次請求,那麼你的資料延遲就可能會高達五秒 特點 資料延遲,消耗資源過大,請求次數太多 原理 利用ajax 佇列 定時朝後端傳送請求,如果沒有資料則會阻塞但是不會一直阻塞,比如阻塞你30秒,還沒有資料則返回,然後讓客戶端瀏覽器再次傳送請求資料的請...