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