2011-05-11 49 views
20

什麼WebSockets添加到原始TCP連接? 我爲什麼要使用WebSockets?WebSockets vs Flash中的原始TCP套接字

我想聽聽缺點和優點一樣:

  • 好:添加的WebSockets像autoreconnection,會話ID等一些有用的東西
  • 壞:WebSockets的增添了不少的開銷

我只有Flash客戶端,不需要支持Javascript客戶端。

+0

關於此主題的更好的信息:http://lucumr.pocoo.org/2012/9/24/websockets-101/ – tybro0103 2013-05-15 14:01:52

回答

17

您無法在瀏覽器中從Web應用程序執行原始套接字。即使來自Flash的「原始」套接字連接也不是真正的原因,因爲您必須回答策略文件請求才能獲得安全性(WebSockets握手的部分原因)。在最初的WebSocket握手之後,WebSocket消息每幀有兩個字節的幀開銷(Hixie- *有'\ x00 ... \ xff',而HyBi-07有兩個字節的頭部),所以開銷是相當可以忽略不計的與普通套接字相比。

WebSocket握手是HTTP兼容升級請求,因此很容易將WebSockets支持集成到現有Web服務器並使用現有Web端口(80/443),這意味着WebSocket連接也可以更容易地集成到現有防火牆規則中。

HTTP兼容握手也意味着現有的HTTP身份驗證機制可以透明地與WebSockets一起工作。此外,WebSockets可以通過現有的Web代理進行代理,幾乎不需要修改。

在WebSockets協議rev(HyBi-07)的下一個版本中,它們可以防止使用客戶端到服務器XOR屏蔽有效負載數據的行爲不當的Web中介。

類似自動重新連接,會話ID等沒有在WebSockets中定義,雖然幾個構建在WebSockets上的JavaScript框架有這樣的,如Socket.IO。如果你正在從Flash應用程序中做WebSockets,那麼你需要做你自己的會話管理或者將現有的會話管理庫轉換爲使用WebSockets而不是Flash套接字(這很容易轉換)。

更新

夫婦的鏈接,可能對你或其他人誰在這裏降落有用:

  • AS3WebSocket:對於Flash應用程序的WebSockets客戶端庫。
  • web-socket-js:在Flash for JavaScript應用程序中實現的WebSockets fallback/polyfill(向具有Flash但沒有本機WebSockets的瀏覽器添加WebSockets支持)。
+0

關於開銷,它是2個字節的最小值,但通常更多。從客戶端到服務器,它是額外的4個字節的掩碼。當數據長度超過126個字節時,你必須爲uint添加另外4個字節的長度。所以通常需要大約10個字節的數據開銷。但是更重要的是,處理這個頭文件並且在服務器端爲每個消息執行解蔽,所以你使用更多的CPU來處理數據。同樣,如果你從數據直接創建好序列化到二進制,那麼使用utf8消息作爲示例JSON會好得多。對於閃存使用原始。 – moka 2012-05-03 09:09:36

+1

Maksims,HyBi工作組非常有意地選擇了掩蔽客戶端 - >服務器流量的機制。由於掩碼包含在幀中,因此不需要記住任何狀態,並且正在運行的4個字節的異或是關於批量或體系結構中最快(高效)的流操作。另外需要注意的是,服務器 - >客戶端流量不會被屏蔽,大型數據通常是服務器 - >客戶端。而且,126-> 65535個字節的幀有2個字節多餘NOT 4個字節多。超過65535是8個額外的字節。這個頭部開銷不會造成可測量的真實世界差異。 – kanaka 2012-05-04 06:02:18

+0

那麼怎麼樣:「每一項新技術都帶來一系列新問題,就WebSocket而言,它是與代理服務器的兼容性,代理服務器在大多數公司網絡中兼容HTTP連接,WebSocket協議使用HTTP升級系統(通常用於HTTP/SSL)將HTTP連接「升級」爲WebSocket連接,某些代理服務器不喜歡這種連接,因此即使給定的客戶端使用WebSocket協議,也可能無法建立一個連接「。 - http://www.html5rocks.com/en/tutorials/websockets/basics/ – Triynko 2013-06-26 17:31:13