国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

nodejs + websocket (socket.io)

awkj / 1333人閱讀

摘要:協(xié)議做不到服務(wù)器主動(dòng)向客戶端推送信息。這種單向請(qǐng)求的特點(diǎn),注定了如果服務(wù)器有連續(xù)的狀態(tài)變化,客戶端要獲知就非常麻煩。雙向通信,服務(wù)器可以向客戶端主動(dòng)發(fā)送數(shù)據(jù)。數(shù)據(jù)格式比較輕量,性能開(kāi)銷小,通信高效。

為什么需要 WebSocket?

因?yàn)閭€(gè)人對(duì)概念理解不是很深,文字表達(dá)能力不強(qiáng),如果有關(guān)HTTP等方面描述不準(zhǔn)確,歡迎糾正,謝謝大家

初次接觸 WebSocket 的人,都會(huì)問(wèn)同樣的問(wèn)題:我們已經(jīng)有了 HTTP 協(xié)議,為什么還需要另一個(gè)協(xié)議?它能帶來(lái)什么好處?

答案很簡(jiǎn)單,因?yàn)?HTTP 協(xié)議有一個(gè)缺陷:通信只能由客戶端發(fā)起

舉例來(lái)說(shuō):我們想了解今天的天氣,只能是客戶端向服務(wù)器發(fā)出請(qǐng)求,服務(wù)器返回查詢結(jié)果。HTTP 協(xié)議做不到服務(wù)器主動(dòng)向客戶端推送信息。

這種單向請(qǐng)求的特點(diǎn),注定了如果服務(wù)器有連續(xù)的狀態(tài)變化,客戶端要獲知就非常麻煩。我們只能使用"輪詢":設(shè)置定時(shí)器每隔一段時(shí)候,就發(fā)出一個(gè)"詢問(wèn)"(簡(jiǎn)單理解為ajax請(qǐng)求),了解服務(wù)器有沒(méi)有新的信息。最典型的場(chǎng)景就是聊天室。

---- 參考了阮一峰老師的文章: WebSocket 教程

輪詢請(qǐng)求的缺點(diǎn):

不停地鏈接,斷開(kāi),鏈接,斷開(kāi)請(qǐng)求,浪費(fèi)很多服務(wù)器資源

浪費(fèi)帶寬

移動(dòng)端浪費(fèi)流量

websocket的優(yōu)點(diǎn):

沒(méi)有同源限制,客戶端可以與任意服務(wù)器通信,不涉及到跨域的問(wèn)題。

雙向通信,服務(wù)器可以向客戶端主動(dòng)發(fā)送數(shù)據(jù)。

數(shù)據(jù)格式比較輕量,性能開(kāi)銷小,通信高效。

websocket為什么高效
普通的http通信是基于字符的通信(超文本), websocket一開(kāi)始是文本協(xié)議, 當(dāng)鏈接建立后變成二進(jìn)制協(xié)議, 數(shù)據(jù)無(wú)需轉(zhuǎn)換,因此效率高。
socket.io的使用
socket.io是一個(gè)封裝后的庫(kù),原生 websocket 比較復(fù)雜,需要自己處理請(qǐng)求頭,設(shè)置持續(xù)鏈接等等。因此使用socket.io
安裝

npm i socket.io -D
socket主要有兩個(gè)方法:
sock.emit("name", data) 主動(dòng)發(fā)送數(shù)據(jù)
sock.on("name", function(data){ })` 接收數(shù)據(jù)

1.服務(wù)端
    // server.js
    const http = require("http")
    const io = require("socket.io")
    
    let server = http.createServer((req, res)=>{})
    server.listen(8080)
    
    // 建立ws  websocket簡(jiǎn)稱ws
    let wsServer = io.listen(server);
    
    wsServer.on("connection", sock=>{
    
      sock.on("aaa", function(a,b){         // name -> "aaa" 要與前臺(tái)的 name 保持一致
        console.log(a)
        console.log(b)
        console.log(arguments)
      })     // "aaa"事件名與前臺(tái)的一致
    
      setInterval(function(){
        sock.emit("bbb", "服務(wù)器發(fā)來(lái)的數(shù)據(jù)")  // name -> "bbb" 要與前臺(tái)的 name 保持一致
      }, 2000)
    })
2. 客戶端



  
  
  

   
  
  



上面的代碼直接復(fù)制下來(lái)就能使用。怎么運(yùn)行nodejs服務(wù)我就不再講了啊。
怎么樣,是不是特別簡(jiǎn)單
媽媽再也不用擔(dān)心我的學(xué)習(xí)了~

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/104227.html

相關(guān)文章

  • 初探WebSocket

    摘要:流控制通常就是在客戶端的頁(yè)面使用一個(gè)隱藏的窗口向服務(wù)端發(fā)出一個(gè)長(zhǎng)連接的請(qǐng)求。和長(zhǎng)鏈接以上幾種服務(wù)器推的技術(shù)中長(zhǎng)輪詢和流控制其實(shí)都是基于長(zhǎng)鏈接來(lái)實(shí)現(xiàn)的,也就是中所謂的。通信協(xié)議于年被定為標(biāo)準(zhǔn),并被所補(bǔ)充規(guī)范。 初探WebSocket node websocket socket.io 我們平常開(kāi)發(fā)的大部分web頁(yè)面都是主動(dòng)‘拉’的形式,如果需要更新頁(yè)面內(nèi)容,則需要刷新一個(gè),但Slack工...

    Channe 評(píng)論0 收藏0
  • NodeJs 【加強(qiáng)版】實(shí)現(xiàn)跨域WebSocket 即時(shí)通訊

    摘要:原生使用起來(lái)不太方便,我們使用,它很好地封裝了接口,提供了更簡(jiǎn)單靈活的接口,也對(duì)不支持的瀏覽器提供了向下兼容。 原生WebSocket API使用起來(lái)不太方便,我們使用Socket.io,它很好地封裝了webSocket接口,提供了更簡(jiǎn)單、靈活的接口,也對(duì)不支持webSocket的瀏覽器提供了向下兼容。 服務(wù)端代碼 根據(jù)不同客戶端傳來(lái)的消息存儲(chǔ)一下 不同的對(duì)象 需要安裝 npm i ...

    PAMPANG 評(píng)論0 收藏0
  • NodeJs 【加強(qiáng)版】實(shí)現(xiàn)跨域WebSocket 即時(shí)通訊

    摘要:原生使用起來(lái)不太方便,我們使用,它很好地封裝了接口,提供了更簡(jiǎn)單靈活的接口,也對(duì)不支持的瀏覽器提供了向下兼容。 原生WebSocket API使用起來(lái)不太方便,我們使用Socket.io,它很好地封裝了webSocket接口,提供了更簡(jiǎn)單、靈活的接口,也對(duì)不支持webSocket的瀏覽器提供了向下兼容。 服務(wù)端代碼 根據(jù)不同客戶端傳來(lái)的消息存儲(chǔ)一下 不同的對(duì)象 需要安裝 npm i ...

    AlphaGooo 評(píng)論0 收藏0
  • NodeJs 【加強(qiáng)版】實(shí)現(xiàn)跨域WebSocket 即時(shí)通訊

    摘要:原生使用起來(lái)不太方便,我們使用,它很好地封裝了接口,提供了更簡(jiǎn)單靈活的接口,也對(duì)不支持的瀏覽器提供了向下兼容。 原生WebSocket API使用起來(lái)不太方便,我們使用Socket.io,它很好地封裝了webSocket接口,提供了更簡(jiǎn)單、靈活的接口,也對(duì)不支持webSocket的瀏覽器提供了向下兼容。 服務(wù)端代碼 根據(jù)不同客戶端傳來(lái)的消息存儲(chǔ)一下 不同的對(duì)象 需要安裝 npm i ...

    ivyzhang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

awkj

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<