0821_長連接(socket)實(shí)現(xiàn)即時(shí)通訊

上節(jié)回顧

異步, 不是要請求服務(wù)器返回網(wǎng)頁, 而是本地的網(wǎng)頁打開, 就可以啟動(dòng), 與后臺(tái)交互.

這樣本地與服務(wù)器, 存在一個(gè)跨域問題, ajax用一個(gè)叫jsonp的東西實(shí)現(xiàn)跨域

新內(nèi)容(長連接-socket實(shí)時(shí)聊天技術(shù))

網(wǎng)絡(luò)模型

tcp/ip參考模型 osi參考模型(理想化)
應(yīng)用層 應(yīng)用層
表示層
會(huì)話層
傳輸層 傳輸層
網(wǎng)絡(luò)層 網(wǎng)絡(luò)層
網(wǎng)絡(luò)接口層 數(shù)據(jù)鏈路層
物理層

即時(shí)通訊的實(shí)現(xiàn)(輪詢->websocket [h5出現(xiàn)后帶來的新技術(shù)])

  • 輪詢:

過去很多網(wǎng)站為了實(shí)現(xiàn)即時(shí)通訊,所用的技術(shù)都是輪詢(polling)。
輪詢是在特定的的時(shí)間間隔(如每1秒),由瀏覽器對服務(wù)器發(fā)出HTTP request,然后由服務(wù)器返回最新的數(shù)據(jù)給客戶端的瀏覽器。
這種傳統(tǒng)的HTTP request 的模式帶來很明顯的缺點(diǎn) –
瀏覽器需要不斷的向服務(wù)器發(fā)出請求,然而HTTP request 的header是非常長的,里面包含的有用數(shù)據(jù)可能只是一個(gè)很小的值,這樣會(huì)占用很多的帶寬。

傳統(tǒng)的http輪詢
  • WebSocket

使用 WebSocket,瀏覽器和服務(wù)器只需要做一個(gè)握手的動(dòng)作,然后,瀏覽器和服務(wù)器之間就形成了一條快速通道。兩者之間就直接可以數(shù)據(jù)互相傳送。
在此WebSocket 協(xié)議中,為我們實(shí)現(xiàn)即時(shí)服務(wù)帶來了兩大好處:

  1. Header --
    互相溝通的Header是很小的-大概只有 2 Bytes
  2. Server Push --
    服務(wù)器的推送,服務(wù)器不再被動(dòng)的接收到瀏覽器的request之后才返回?cái)?shù)據(jù),而是在有新數(shù)據(jù)時(shí)就主動(dòng)推送給瀏覽器。
web socket

終端&web頁面聊天室

  • 終端交互聊天室(net & readline)

net 模塊用來實(shí)現(xiàn) socket 功能, readline 用來讀取 client 的輸入

server 端先創(chuàng)建socket監(jiān)聽 ->
client 端沒開啟一個(gè)(當(dāng)做一個(gè)用戶)將其地址信息保存 ->
當(dāng)某個(gè) client 發(fā)送信息時(shí), server 端接收信息, 并且對其進(jìn)行處理 ->
最后通過 server 將其信息廣播出去.

  • web頁面交互(socket.io)

思路與終端聊天室相似, 只是使用模塊區(qū)別

用戶請求服務(wù)器, 開啟聊天頁面, 當(dāng)然, 服務(wù)器需要驗(yàn)證用戶身份 ->
用戶通過登錄審核后, 即完成了一次握手, 接下來便可進(jìn)行即時(shí)通訊 ->
同樣要求服務(wù)器端進(jìn)行 socket 監(jiān)聽和信息廣播.

作業(yè)

nodejs寫基于終端和頁面的聊天室

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容