若是你曾經使用過一種服務器端語言和一種數據庫構建過一個網頁聊天室,你會很想知道WebSockets和傳統方式實現之間的差異。 數據庫
傳統聊天室一般是使用輪詢方法實現的。客戶端週期性地向服務器詢問是否有更新。服務器回覆給客戶端更新的數據或者沒有更新。然而,傳統方法有如下問題。只有客戶端主動詢問服務器才能從服務器得到更新的數據。這意味着更新的數據會週期性延遲並且服務器的應答不夠及時。若是咱們想經過減小輪詢過程來改進這個問題,則須要更大帶寬,由於客戶端須要不間斷地向服務器發送請求。 服務器
下圖展現了客戶端和服務器之間的請求。它代表許多無用請求被髮送了,然而服務器向客戶端回覆的內容中並無新數據。 服務器端
長輪詢是一種更好的輪詢方法。客戶端向服務器發送請求並等待回覆。而不是傳統輪詢方法中服務器回覆"no update"且服務器只有當須要將信息推送到服務器時纔回復。在這種方法中,服務器能夠無論什麼時候有更新均可以推送信息到客戶端。一旦客戶端收到服務器的應答,它構建另外一個請求並等待下一個服務器的推送。下圖展現了長輪詢,客戶端詢問更新,服務器只有在有更新時纔回復: date
在WebSockets方法中,請求數目大大少於輪詢方法。這是由於客戶端和服務器的鏈接是永久的。一旦鏈接創建,只有信息更新時,客戶端或者服務器端才發送請求。舉例,客戶端想向服務器更新信息時就向服務器發送信息。服務器只有須要推送給客戶端更新數據時才向客戶端發送消息。在鏈接中,沒有無用請求發送。所以,只須要更小的帶寬。下圖展現了WebSockets方法: 請求