Long-Polling, Websockets, SSE(Server-Sent Event), WebRTC 之間的區別

在下面的示例中,客戶端指的是瀏覽器,服務器指的是網站服務器主機。javascript

爲了更好的理解這些知識點,你應該簡單瞭解典型的http網站是如何工做的。html

普通的http:

  1. 客戶端從服務器端請求網頁
  2. 服務器做出相應的反應
  3. 服務器返回相應到客戶端

AJAX Polling:

  1. 客戶端使用普通的http方式向服務器端請求網頁
  2. 客戶端執行網頁中的JavaScript輪詢腳本,按期循環的向服務器發送請求(例如每5秒發送一次請求),獲取信息
  3. 服務器對每次請求做出響應,並返回相應信息,就像正常的http請求同樣

AJAX Long-Polling:

  1. 客戶端使用普通的http方式向服務器端請求網頁
  2. 客戶端執行網頁中的JavaScript腳本,向服務器發送數據、請求信息
  3. 服務器並非當即就對客戶端的請求做出響應,而是等待有效的更新
  4. 當信息是有效的更新時,服務器纔會把數據推送給客戶端
  5. 當客戶端接收到服務器的通知時,當即會發送一個新的請求,進入到下一次的輪詢

HTML5 Server Sent Events (SSE) / EventSource:

  1. 客戶端使用普通的http方式向服務器端請求網頁
  2. 客戶端執行網頁中的JavaScript腳本,與服務器之間創建了一個鏈接
  3. 當服務器端有有效的更新時,會發送一個事件到客戶端
    • 服務器到客戶端數據的實時推送,大多數內容是你須要的
    • 你須要一臺能夠作Event Loop的服務器
    • 不容許跨域的鏈接
    • 若是你以爲這些還不夠,想要了解更多,能夠參考下面的文件和手冊
      Using server-sent events
      https://developer.mozilla.org/en-US/docs/Server-sent_events/Using_server-sent_events
      Server-Sent Events
      http://html5doctor.com/server-sent-events
      Stream Updates with Server-Sent Events
      http://www.html5rocks.com/en/tutorials/eventsource/basics/
      Tutorial: JSF 2 and HTML5 Server Sent Events
      http://jaxenter.com/tutorial-jsf-2-and-html5-server-sent-events-42932.html

HTML5 Websockets:

  1. 客戶端使用普通的http方式向服務器端請求網頁
  2. 客戶端執行網頁中的JavaScript腳本,與服務器之間創建了一個鏈接
  3. 服務器和客戶端之間,能夠雙向的發送有效數據到對方
    • 服務器能夠實時的發送數據到客戶端,同時客戶端也能夠實時的發送數據到服務器
    • 你須要一臺能夠作Event Loop的服務器
    • 使用 WebSockets 容許跨域的創建鏈接
    • 它一樣支持第三方的websocket主機服務器,例如Pusher或者其它。這樣你只須要關心客戶端的實現 ,下降了開發難度。
    • 若是你以爲這些還不夠,想要了解更多,能夠參考下面的文件和手冊
      An Introduction To WebSockets
      http://www.developerfusion.com/article/143158/an-introduction-to-websockets/
      Writing WebSocket client applications
      https://developer.mozilla.org/en-US/docs/WebSockets/Writing_WebSocket_client_applications
      Start Using HTML5 WebSockets Today
      http://code.tutsplus.com/tutorials/start-using-html5-websockets-today--net-13270

WebRTC:

WebRTC是一種點對點類型的傳輸方式,它支持多種傳輸協議,如:UDP、TCP甚至是抽象層的協議。設計它時同時考慮到了容許使用可靠和不可靠的兩種方式傳輸數據。這種技術通常應用在傳輸數據量較大的內容,好比音、視頻等流媒體的傳輸。html5

Comet:

Comet是一種用於web的推送技術,能使服務器實時地將更新的信息傳送到客戶端,而無須客戶端發出請求,目前有兩種實現方式,長輪詢iframe流。若是你想了解更多,能夠參考維基百科或者IBMjava

Event Loop
Event Loop是一個程序結構,用於等待和發送消息和事件。
長輪詢
長輪詢是在打開一條鏈接之後保持,等待服務器推送來數據再關閉的方式。
iframe流

iframe流方式是在頁面中插入一個隱藏的iframe,利用其src屬性在服務器和客戶端之間建立一條長連接,服務器向iframe傳輸數據(一般是HTML,內有負責插入信息的javascript),來實時更新頁面。web

iframe流方式的優勢是瀏覽器兼容好,Google公司在一些產品中使用了iframe流,如Google Talk。ajax




相關文章
相關標籤/搜索