日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

轮询、长轮询与Web Socket的前端实现

發(fā)布時間:2025/3/12 HTML 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 轮询、长轮询与Web Socket的前端实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Web Socket

應(yīng)用場景:實現(xiàn)即時通訊:如股票交易行情分析、聊天室、在線游戲等,替代輪詢和長輪詢

輪詢

輪詢是在特定的的時間間隔(如每1秒),由瀏覽器對服務(wù)器發(fā)出HTTP request,然后由服務(wù)器返回最新的數(shù)據(jù)給客戶端的瀏覽器。這種傳統(tǒng)的HTTP request 的模式帶來很明顯的缺點 – 瀏覽器需要不斷的向服務(wù)器發(fā)出請求,然而HTTP request 的header是非常長的,里面包含的有用數(shù)據(jù)可能只是一個很小的值,這樣會占用很多的帶寬。

var xhr = new XMLHttpRequest();setInterval(function(){xhr.open('GET','/user');xhr.onreadystatechange = function(){};xhr.send();},1000)

長輪詢:

ajax實現(xiàn):在發(fā)送ajax后,服務(wù)器端會阻塞請求直到有數(shù)據(jù)傳遞或超時才返回。 客戶端JavaScript響應(yīng)處理函數(shù)會在處理完服務(wù)器返回的信息后,再次發(fā)出請求,重新建立連接。

function ajax(){var xhr = new XMLHttpRequest();xhr.open('GET','/user');xhr.onreadystatechange = function(){ajax();};xhr.send();}

Web Socket:

輪詢與長輪詢都是基于HTTP的,兩者本身存在著缺陷:輪詢需要更快的處理速度;長輪詢則更要求處理并發(fā)的能力;兩者都是“被動型服務(wù)器”的體現(xiàn):服務(wù)器不會主動推送信息,而是在客戶端發(fā)送ajax請求后進行返回的響應(yīng)。而理想的模型是"在服務(wù)器端數(shù)據(jù)有了變化后,可以主動推送給客戶端",這種"主動型"服務(wù)器是解決這類問題的很好的方案。Web Sockets就是這樣的方案。 //需要先npm install ws//服務(wù)器端 var Server = require('ws').Server; var wss = new Server({port:2000 }); wss.on('connection',function(ws){ws.on('message',function(data){ws.send('你好,客戶端,我是服務(wù)器!');console.log(data);}) });//node客戶端var WebSocket = require('ws'); var socket = new WebSocket('ws://localhost:2000/'); socket.on('open',function(){socket.send('你好,服務(wù)器,我是客戶端'); }); socket.on('message',function(event){console.log(event); })//html客戶端(:瀏覽器客戶端與node客戶端只需要一種)<script>var socket = new WebSocket('ws://localhost:2000');socket.addEventListener('open', function (event) {socket.send('Hello Server!');});// Listen for messagessocket.addEventListener('message', function (event) {console.log('Message from server ', event.data);}); </script> 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎

總結(jié)

以上是生活随笔為你收集整理的轮询、长轮询与Web Socket的前端实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。