1. 程式人生 > >Websocket 與 Socket.IO、Socket

Websocket 與 Socket.IO、Socket

      最近在開發網路應用專案,使用websocket協議,後端弄好後,昨天前端同事突然跑過來說,你這個是Socket.IO,不是 Websocket!?一臉無奈 —| | |
      我是清楚Socket.IO是基於Websocket協議,但其他就解釋不了給他。另也對websocket 與 Socket的關係有疑惑? 開啟 G妹 模式 ......

Websocket 為何?

        詳見 ----> 

websocket的那些事 - 初識

Socket.IO是什麼?

        支援WebSocket協議、用於實時通訊和跨平臺的框架。

        Socket.IO除了支援WebSocket通訊協議外,還支援許多種輪詢(Polling)機制以及其它實時通訊方式,並封裝成了通用的介面,並且在服務端實現了這些實時機制的相應程式碼。Socket.IO實現的Polling通訊機制包括Adobe Flash Socket、AJAX長輪詢、AJAX multipart streaming、持久Iframe、JSONP輪詢等。Socket.IO能夠根據瀏覽器對通訊機制的支援情況自動地選擇最佳的方式來實現網路實時應用。

         Socket.IO設計的目標是構建能夠在不同瀏覽器和移動裝置上良好執行的實時應用,如實時分析系統、二進位制流資料處理應用、線上聊天室、線上客服系統、評論系統、WebIM等。目前,Socket.IO已經支援主流PC瀏覽器(如IE、Safari、Chrome、Firefox、Opera等)和移動平臺上的瀏覽器(iOS平臺下的Safari、Android平臺下的基於Webkit的瀏覽器等)。

        Socket.IO已經具有眾多強大功能的模組和擴充套件API,如(session.socket.io)

(http session中介軟體,進行session相關操作)、socket.io-cookie(cookie解析中介軟體)、session-web-sockets(以安全的方式傳遞Session)、socket-logger(JSON格式的記錄日誌工具)、websocket.MQ(可靠的訊息佇列)、socket.io-mongo(使用MongoDB的介面卡)、socket.io-redis(Redis的介面卡)、socket.io-parser(服務端和客戶端通訊的預設協議實現模組)等。

         Socket.IO實現了實時、雙向、基於事件的通訊機制,它解決了實時的通訊問題,並統一了服務端與客戶端的程式設計方式。啟動了Socket以後,就像建立了一條客戶端與服務端的管道,兩邊可以互通有無。它還能夠和Express.js提供的傳統請求方式很好的結合,即可以在同一個域名,同一個埠提供兩種連線方式。

java例項程式碼詳見 ----> websocket的那些事 - java client/server Hello World例項

Socket?

        常聽人說,Socket程式設計,直觀理解就是網路程式設計。

       Socket 是TCP/IP網路的API,Socket介面定義了許多函式或例程,程式員能夠用他來研發基於TCP/IP協議的網路應用程式。

總結

       1、WebSocket同HTTP一樣是應用層的協議,但是它是一種雙向通訊協議,通過http協議建立連線,通訊則使用TCP

        2、Socket是基於 TCP/IP[傳輸控制層協議] 程式設計介面

        這樣看來,websocket 與 socket 沒有半毛錢關係,但,還是有點關係 

       話說 -_- 2008年6月18日,一群WHATWG的工程師在討論一些技術問題,一個工程師提到說「我們之前討論的那個東西,不要叫TCPConnection 了,還是起個別的名字吧 」,接著幾個名字被提及,DuplexConnection,TCPSocket,SocketConnection ,一個叫mcarter(Michael Carter )的工程師說他馬上要寫一篇關於Comet的文章,如果可以確定這個名稱,想在文章中引用這個名字。

       Socket一直以來都被人用來表示網路中一個連線的兩端,考慮到怎麼讓工程師更容易接受,後來Hixie說了一句「我看WebSocket這個名字就很適合嘛(Hixie briefly pops back online to record that "WebSocket" would probably be a good new name for the TCPConnection object)」,大家都沒有異議,緊接著mcarter在Comet Daily中發表了文章Independence Day: HTML5 WebSocket Liberates Comet From Hacks,後來隨著各大瀏覽器對WebSocket的支援,它變成了實際的標準,IETF也沿用了這個名字。

參考資料

Socket.IO:支援WebSocket協議、用於實時通訊和跨平臺的框架

WebSocket和Socket的區別

WebSocket介紹,與Socket的區別