http與WebSocket


利用websocket連接服務器的最大特點就是:持久鏈接的特點。

共同點是:都是基於TCP協議進行client-server的鏈接,websocket是HTML5提出的一套補缺HTTP鏈接中不能持久鏈接的特點(除長連接,長輪詢)

輪詢(AJAX):指的是瀏覽器端定時發送請求到服務器端,服務器接收到請求后作出響應並關閉連接該次鏈接。
    (缺點是:在時間定時上需要考慮更多,多久進行一次輪詢等)


長輪詢:跟輪詢的原理相似,但是有個重要的特點是,瀏覽器發送請求后,服務器此時是保持該鏈接(主要方法是死循環執行,定時sleep超時后斷開連接),在定時斷開鏈接之前,獲取到最新數據並返回瀏覽器后,在由瀏覽器重新發起一個新的請求。
    (缺點是:會並發性的發起很多的http請求。)


    輪詢與長輪詢共同的缺點是:需要浪費很多的http資源,請求的數量較大。


長連接:類似前端中跨域請求中,利用iframe的src的跨域特點,在頁面中隱藏一個iframe進行定時獲取后台數據,反饋到iframe中,實現后台數據的獲取。
    長鏈接的缺點也是:必須要定時發起請求服務器更新數據資源。


前面的問題是:
  在連接后的過程中,服務器都會不停的鏈接與斷開,數據頭信息不停重復的發送,浪費寬帶,信息交換的效率低下。

  他們之間建立的“長連接”是“偽長連接”,只是靠服務器不斷循環實現了所謂的長連接效果。

websocket解決的問題:
    實質的推送方式是服務器主動推送,只要有數據就推送到請求方。(變被動為主動)

    websocket采用異步回調的方式接受消息,當建立通信連接,可以做到持久性的連接,並進行通信。

  (而不像上面的幾種方式一樣需要定時進行發起請求到服務器獲取最新更新信息,顯得相當的被動)


    websocket通過自己的 WS 協議(此處與HTTP協議有所區別)創建一個基於HTTP request請求並創建TCP鏈接之后,之后的數據交換都不需要再次去創建鏈接,實現真正的長連接。

    websocket協議本質上是一個基於TCP的協議。建立連接需要握手,客戶端(瀏覽器)首先向服務器(web server)發起一條特殊的http請求,web server解析后生成應答到瀏覽器,這樣子一個websocket連接就建立了,直到某一方關閉連接。

    當然基於Node.js編寫的一個Socket.IO 是一個開源實現WebSocket的庫,它通過node.js實現服務端的同時,也提供了客戶端js庫,socket.io 支持事件觸發為基礎進行的雙向數據通信。


    查看更多相關Socket.IO的資料轉到:http://socket.io/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM