讓瀏覽器定時朝後端傳送請求(通過ajax向後端偷偷傳送資料),比如每隔五秒鐘發一次請求,那麼你的資料延遲就可能會高達五秒不足之處
資料延遲
消耗資源過大
請求次數太多
#基於ajax及佇列實現長輪詢的功能佇列+ajax
服務端給每個客戶端建立佇列,讓瀏覽器通過ajax朝服務端要資料,去各自的佇列中獲取
如果沒有資料則會阻塞但是不會一直阻塞,比如阻塞你30秒,還沒有資料則返回,然後讓客戶端瀏覽器再次傳送請求資料的請求
相對於輪詢
基本是沒有訊息延遲的
請求次數降低了很多
#
"""真正的做到服務端傳送訊息而不再是被動的傳送1.首頁自定義使用者唯一表示,給每個使用者初始化乙個佇列
2.傳送按鈕繫結點選事件 後端講資料放入每乙個佇列中
3.書寫自動獲取資料的ajax** 迴圈呼叫
4.前端獲取資料dom操作渲染頁面
"""$(
'#d1
').click(function () ,
datatype:
'json',
success:function (args)
})});
function getmsg()}
'}, //只要當前登陸人的佇列中的資料
success:function (args)
else
getmsg() //迴圈請求資料}})
}$(function () )
#後端#全域性大字典
q_dict = {} #
defab_bl(request):
#獲取我們自定義的客戶端唯一標識
name = request.get.get('
name')
#給每乙個客戶端建立乙個佇列
q_dict[name] =queue.queue()
return render(request,'
ab_bl.html
',locals())
defsend_msg(request):
if request.method == '
post':
#獲取使用者傳送的訊息
content = request.post.get('
content')
#講該訊息傳遞給所有的佇列
#拿到對應的佇列
q =q_dict.get(name)
#講佇列中可能有的資料取出並返回給前端瀏覽器
#定義乙個字典與ajax進行互動
back_dic =
try:
data = q.get(timeout=10) #
等10s 沒有則直接報錯
目前主流的瀏覽器都是支援websocket
"""http協議 網路協議(不加密傳輸)
https協議 網路協議(加密傳輸)
上面兩個協議都是短鏈結
websocket網路協議 (加密傳輸)
瀏覽器和服務端建立鏈結之後 預設不再斷開
兩端都可以基於該鏈結收發訊息
websocket的誕生能夠真正做到服務端傳送訊息而不再是被動的傳送
"""
"""分成兩大部分
1.握手環節:驗證服務端是否支援websocket協議
先連線伺服器
瀏覽器產生乙個隨機字串 給服務端傳送乙份(請求頭) 自己留乙份
sec-websocket-key: epw8kp1xqlnwbjxe/q38sa==
服務端和客戶端都對隨機字串做下面的操作
隨機字串 + magic string拼接
然後再將拼接好的結果進行加密處理(sha1/base64)得到密文
瀏覽器自動比對雙方產生的密文是否一致,如果一致說明服務端支援websocket
如果不一致會報錯
假設比對上了 建立websocket鏈結 基於該鏈結收發訊息
2.收發資料
密文傳輸 >>> 必然要涉及解密(全球統一)的過程
基於網路傳輸的資料都是二進位制格式 對應到我們python中就是bytes型別
資料解密過程
1.先讀取資料的第二個位元組的後7位(payload)
根據7位資料的大小來指定不同的解密流程
=127:再往後讀取8個位元組
=126:再往後讀取2個位元組
<=125:不再往後讀取
除去前面讀取的資料之外 再往後讀4個位元組(masking-key)
拿著它去解析後面的真實資料(依據乙個計算公式)
輪詢,長輪詢,Websocket
原理 利用ajax定時朝後端傳送請求,比如每隔五秒鐘發一次請求,那麼你的資料延遲就可能會高達五秒 特點 資料延遲,消耗資源過大,請求次數太多 原理 利用ajax 佇列 定時朝後端傳送請求,如果沒有資料則會阻塞但是不會一直阻塞,比如阻塞你30秒,還沒有資料則返回,然後讓客戶端瀏覽器再次傳送請求資料的請...
1 輪詢 長輪詢 websocket簡介
一 輪詢 前端每隔固定時間向後台傳送一次請求,詢問伺服器是否有新資料 缺點 延遲,需要固定的輪詢時間,不一定是實時資料 大量耗費伺服器記憶體和寬頻資源,因為不停的請求伺服器,很多時候 並沒有新的資料更新,因此絕大部分請求都是無效請求 二 長輪詢 當伺服器收到前端發來的請求後,伺服器端不會直接進行響應...
輪詢 長輪詢
輪詢 通過setinterval向後台請求資料,更新html from flask import flask,render template,request,jsonify users 2 3 user list defuser list import time return render temp...