引用:https://www.ibm.com/developerworks/cn/web/1112_huangxa_websocket/index.htmlhtml
做爲下一代的 Web 標準,HTML5 擁有許多引人注目的新特性,如 Canvas、本地存儲、多媒體編程接口、WebSocket 等等。這其中有「Web 的 TCP 」之稱的 WebSocket 格外吸引開發人員的注意。WebSocket 的出現使得瀏覽器提供對 Socket 的支持成爲可能,從而在瀏覽器和服務器之間提供了一個基於 TCP 鏈接的雙向通道。Web 開發人員能夠很是方便地使用websocket構建實時web應用,開發人員的手中今後又多了一柄神兵利器。前端
實時web 應用
普通web請求通信過程
web
1.問題:好比說在線遊戲、在線證券、設備監控、新聞在線播報、RSS 訂閱推送等等,當客戶端瀏覽器準備呈現這些信息的時候,這些信息在服務器端可能已通過時了。
2.[之前的解決方案][3]
1)ajax輪詢:前端設置一個定時器,每隔一段時間,給服務器發送一個請求,而後服務器給你返回,不停的問,服務器不停的回,最後的結果,服務器弱點的話,就是崩了!
2)long poll (長輪詢):這個也是同一個機制,不過採起的是阻塞模型。客戶端到服務器家借錢,服務器沒有錢,說是去打工掙錢了,等掙到錢就給他,可是客戶端不走,等到服務器把錢拿回來了再走,或者客戶端等的時間太長了,已經超過它設定的等待時間,它就會結束此次借錢任務,而後過些時候,再過來看看,服務器是否是已經有錢了。若是說是,客戶端不停的和服務器要錢,來一趟,拿走,再來一趟,拿走,那麼這種方法和ajax輪詢沒有區別。術語:當服務器端沒有數據更新的時候,鏈接會保持一段時間週期直到數據或狀態改變或者時間過時,經過這種機制來減小無效的客戶端和服務器間的交互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)chrome