今天不講太多具體的技術,隨便侃一侃WebSocket,想到哪說哪。
和comet相比
相比comet技術,websocket不僅節約了header的問題(websocket的head資訊只有短短的2個位元組)。更加重要的是是通訊的穩定性,comet在遇到網路問題之後,想要在不重新整理頁面的情況下恢復通訊,非常困難,而websocket中提供了onclose函式來處理斷開網路後的情況,這為我們與伺服器的通訊提供了可靠的保障。在、github上有一個js庫
(github.com/joewalnes/r…
當然這麼好用的websocket也不是沒有它的問題,websocket目前來看最大的問題是瀏覽器的支援(幸好大部分的伺服器軟體在比較新的版本中都已經支援了websocket),ie直到10才開始支援這種協議,而且每個瀏覽器最近在升級瀏覽器的時候,都會對websocket做出細微的調整。而且,想象你開啟一個頁面,當這個頁面開啟websocket連線並且執行一個內部IP地址的埠掃描,如果埠掃描發現了內部網路上發現了一個開啟的80埠,一個隧道就可能通過你的瀏覽器建立。這樣做很可能最終繞過防火牆,並且允許訪問內部內容。所以安全問題,也是websocket現在面臨的一大隱患。
WebSocket是HTML5出的協議,也就是說HTTP協議沒有變化,或者說沒關係,但HTTP是不支援持久連線的(長連線,迴圈連線的不算)。
首先HTTP有 1.1 和 1.0 之說,也就是所謂的 keep-alive ,把多個HTTP請求合併為一個,但是 Websocket 其實是一個新協議,跟HTTP協議基本沒有關係,只是為了相容現有瀏覽器的握手規範而已,也就是說它是HTTP協議上的一種補充。有交集,但是並不是全部 。 另外Html5是指的一系列新的API,或者說新規範,新技術。Http協議本身只有1.0和1.1,而且跟Html本身沒有直接關係。通俗來說,你可以用HTTP協議傳輸非Html資料,就是這樣。再簡單來說,層級不一樣。 WebSocket的協議是持久化的,而HTTP是非持久化的協議。
今天說到這裡,關於WebSocket的下次我們接著聊。www.goeasy.io 這家是專門做WebSocket的,有興趣可以關注一下。