上節(jié)回顧
異步, 不是要請求服務(wù)器返回網(wǎng)頁, 而是本地的網(wǎng)頁打開, 就可以啟動, 與后臺交互.
這樣本地與服務(wù)器, 存在一個跨域問題, ajax用一個叫jsonp的東西實現(xiàn)跨域
新內(nèi)容(長連接-socket實時聊天技術(shù))
網(wǎng)絡(luò)模型
tcp/ip參考模型 | osi參考模型(理想化) |
---|---|
應(yīng)用層 | 應(yīng)用層 |
表示層 | |
會話層 | |
傳輸層 | 傳輸層 |
網(wǎng)絡(luò)層 | 網(wǎng)絡(luò)層 |
網(wǎng)絡(luò)接口層 | 數(shù)據(jù)鏈路層 |
物理層 |
即時通訊的實現(xiàn)(輪詢->websocket [h5出現(xiàn)后帶來的新技術(shù)])
- 輪詢:
過去很多網(wǎng)站為了實現(xiàn)即時通訊,所用的技術(shù)都是輪詢(polling)。
輪詢是在特定的的時間間隔(如每1秒)切省,由瀏覽器對服務(wù)器發(fā)出HTTP request浪耘,然后由服務(wù)器返回最新的數(shù)據(jù)給客戶端的瀏覽器千诬。
這種傳統(tǒng)的HTTP request 的模式帶來很明顯的缺點 –
瀏覽器需要不斷的向服務(wù)器發(fā)出請求瓮下,然而HTTP request 的header是非常長的鸳谜,里面包含的有用數(shù)據(jù)可能只是一個很小的值,這樣會占用很多的帶寬鲸湃。
- WebSocket
使用 WebSocket,瀏覽器和服務(wù)器只需要做一個握手的動作盅安,然后唤锉,瀏覽器和服務(wù)器之間就形成了一條快速通道。兩者之間就直接可以數(shù)據(jù)互相傳送别瞭。
在此WebSocket 協(xié)議中窿祥,為我們實現(xiàn)即時服務(wù)帶來了兩大好處:
- Header --
互相溝通的Header是很小的-大概只有 2 Bytes - Server Push --
服務(wù)器的推送,服務(wù)器不再被動的接收到瀏覽器的request之后才返回數(shù)據(jù)蝙寨,而是在有新數(shù)據(jù)時就主動推送給瀏覽器晒衩。
終端&web頁面聊天室
- 終端交互聊天室(net & readline)
net 模塊用來實現(xiàn) socket 功能, readline 用來讀取 client 的輸入
server 端先創(chuàng)建socket監(jiān)聽 ->
client 端沒開啟一個(當做一個用戶)將其地址信息保存 ->
當某個 client 發(fā)送信息時, server 端接收信息, 并且對其進行處理 ->
最后通過 server 將其信息廣播出去.
- web頁面交互(socket.io)
思路與終端聊天室相似, 只是使用模塊區(qū)別
用戶請求服務(wù)器, 開啟聊天頁面, 當然, 服務(wù)器需要驗證用戶身份 ->
用戶通過登錄審核后, 即完成了一次握手, 接下來便可進行即時通訊 ->
同樣要求服務(wù)器端進行 socket 監(jiān)聽和信息廣播.
作業(yè)
nodejs寫基于終端和頁面的聊天室