1. 程式人生 > >websocket個人理解總結

websocket個人理解總結

為什麽 chat 但是 socket.io 客戶端瀏覽器 圖片 ges handler html5

WebSocket

  • 釋義:聊天室、服務、套接字、協議
  • 引用:https://www.ibm.com/developerworks/cn/web/1112_huangxa_websocket/index.html

    作為下一代的 Web 標準,HTML5 擁有許多引人註目的新特性,如 Canvas、本地存儲、多媒體編程接口、WebSocket 等等。這其中有“Web 的 TCP ”之稱的 WebSocket 格外吸引開發人員的註意。WebSocket 的出現使得瀏覽器提供對 Socket 的支持成為可能,從而在瀏覽器和服務器之間提供了一個基於 TCP 連接的雙向通道。Web 開發人員可以非常方便地使用websocket構建實時web應用,開發人員的手中從此又多了一柄神兵利器。

  • webSocket協議是一個持久化協議,相對http這種非持久的協議來說。
    簡單說:http1.0中,一個request對應一個response,當次訪問結束
    http1.1中,多個request對應多個response,采用keep-alive;
    總歸:一個req只能對應一個res,並且這個res不能主動發送給客戶端,它是被動的。嗯,很被動。並且,http是無狀態協議,一旦請求結束,它就會把關於請求的一切都給忘了,然後等你下次再請求的時候,還得重新認識它一下,重新發送請求,它再重新給你計算一次結果並返回給你。
  • 實時web 應用
    普通web請求通訊過程
    技術分享圖片

1.問題:比如說在線遊戲、在線證券、設備監控、新聞在線播報、RSS 訂閱推送等等,當客戶端瀏覽器準備呈現這些信息的時候,這些信息在服務器端可能已經過時了。
2.[以前的解決方案][3]


1)ajax輪詢:前端設置一個定時器,每隔一段時間,給服務器發送一個請求,然後服務器給你返回,不停的問,服務器不停的回,最後的結果,服務器弱點的話,就是崩了!
2)long poll (長輪詢):這個也是同一個機制,不過采取的是阻塞模型。客戶端到服務器家借錢,服務器沒有錢,說是去打工掙錢了,等掙到錢就給他,但是客戶端不走,等到服務器把錢拿回來了再走,或者客戶端等的時間太長了,已經超過它設定的等待時間,它就會結束這次借錢任務,然後過些時候,再過來看看,服務器是不是已經有錢了。如果說是,客戶端不停的和服務器要錢,來一趟,拿走,再來一趟,拿走,那麽這種方法和ajax輪詢沒有區別。術語:當服務器端沒有數據更新的時候,連接會保持一段時間周期直到數據或狀態改變或者時間過期,通過這種機制來減少無效的客戶端和服務器間的交互

  • 簡單的總結:(若錯誤請指出)
    1.性能高:為什麽性能高呢,因為客戶端只要一次請求,連接上了,就不再請求,等待服務器主動給客戶端數據:[情景如下][3]:
    客戶端:啦啦啦,我要建立Websocket協議,需要的服務:chat,Websocket協議版本:17(HTTP Request)
    服務端:ok,確認,已升級為Websocket協議(HTTP Protocols Switched)
    客戶端:麻煩你有信息的時候推送給我噢。。
    服務端:ok,有的時候會告訴你的。
    服務端:有更新啦
    服務端:又有更新啦
    服務端:哈哈哈哈哈啊哈哈哈哈
    服務端:笑死我了哈哈哈哈哈哈哈
    那麽為什麽他會解決服務器上消耗資源的問題呢?其實我們所用的程序是要經過兩層代理的,即HTTP協議在Nginx等服務器的解析下,然後再傳送給相應的Handler(PHP等)來處理。簡單地說,我們有一個非常快速的接線員(Nginx),他負責把問題轉交給相應的客服(Handler)。本身接線員基本上速度是足夠的,但是每次都卡在客服(Handler)了,老有客服處理速度太慢。,導致客服不夠。Websocket就解決了這樣一個難題,建立後,可以直接跟接線員建立持久連接,有信息的時候客服想辦法通知接線員,然後接線員在統一轉交給客戶。這樣就可以解決客服處理速度過慢的問題了
    [3]:https://www.zhihu.com/question/20215561
    2.雙向:服務器也能主動發送數據給客戶端了,不再是客戶端踹一腳應一聲的狀態
    3.兼容性:能兼容到ie10+,chrome4+,firefox4+,opera10+,Safari5+
    4.能跨域(socket.io)

socket.io
  • 釋義:[Socket.IO 是一個用來實現實時雙向通信的框架,其本質是基於 WebSocket 技術。Socket.IO 與 ws 等其他基於 webSocket 通信的庫相比,它的好處在於,當瀏覽器支持 WebSocket 技術時它能正常使用 WebSocket 來工作,當瀏覽器不支持 WebSocket 時,它能平穩退化成輪詢進行工作][4]
    [4]:http://www.cnblogs.com/ghost-xyx/p/7060070.html
  • Socket.IO 在[客戶端][5]與[服務端][6]二者均有一套 API
    [5]:https://socket.io/docs/client-api/
    [6]:https://socket.io/docs/server-api/

websocket個人理解總結