輪詢與長輪詢

2022-07-02 09:33:10 字數 1426 閱讀 5222

"""

輪詢即輪番詢問

讓瀏覽器定時(例如每隔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秒,還沒有資料則返回,然後讓客戶端瀏覽器再次傳送請求資料的請...