簡介 SockJS – 在 WebSocket 無法普及化的最佳方案

HTM5 喊了很久了,其中 WebSocket 這功能可以實現以 JavaScript 寫出即時通訊的應用,不過 WebSocket 有瀏覽器相容性問題,因此有很多替代方案,之前有一些文章提過 Comet 這一名詞可以做出很像即時的應用,不過最近在玩  Vert.x 這東西的時候也看到了 SockJS 這東西。

SockJS 其實有制定出一種協定來讓所有瀏覽器可以使用統一的 API 來做到即時通訊,該 API  的名稱命名方式基本上也和 WebSocket 一樣,而跨瀏覽器解決相容性問題的實現方式其實是採用了混和式的方法將各種可能用上的Web技術實作出來,如以下列表用了很多 AJAX 長時連線的技巧

Browser Websockets Streaming Polling
IE 6, 7 no no jsonp-polling
IE 8, 9 (cookies=no) no xdr-streaming † xdr-polling †
IE 8, 9 (cookies=yes) no iframe-htmlfile iframe-xhr-polling
IE 10 rfc6455 xhr-streaming xhr-polling
Chrome 6-13 hixie-76 xhr-streaming xhr-polling
Chrome 14+ hybi-10 / rfc6455 xhr-streaming xhr-polling
Firefox <10 no ‡ xhr-streaming xhr-polling
Firefox 10+ hybi-10 / rfc6455 xhr-streaming xhr-polling
Safari 5 hixie-76 xhr-streaming xhr-polling
Opera 10.70+ no ‡ iframe-eventsource iframe-xhr-polling
Konqueror no no jsonp-polling

這個專案其實是佛心來的,利用這套 SockJS Client 在前端只需要專注幾道指令不用去管甚麼相容性就能做出即時通訊應用了,而 Server 端目前支援的語言比較少 …

SockJS family:

Work in progress:

以上都是由 sockJS 的 github 節錄而來,

基本上這種應用應該挺要求效能的,我認為 node.js 或 vert.x 這兩套來寫 Server 端 應該比較符合實際產品開發的應用吧,sockJS 由於命名各種事件的名稱與 native WebSocket 的名稱幾乎一樣,在未來若要完全移轉到 WebSocket 應該也比較無痛吧。

有興趣的朋友可以研究看看,我也正在研究中看有沒有辦法寫出甚麼好玩的鳥當中

SockJS 的 GitHub網址是 https://github.com/sockjs/sockjs-client

 

發佈留言