最近在開發網絡應用項目,使用websocket協議,後端弄好後,昨天前端同事忽然跑過來講,你這個是Socket.IO,不是 Websocket!?一臉無奈 —| | |
我是清楚Socket.IO是基於Websocket協議,但其餘就解釋不了給他。另也對websocket 與 Socket的關係有疑惑? 開啓 G妹 模式 ......html
詳見 ----> websocket的那些事 - 初識前端
支持WebSocket協議、用於實時通訊和跨平臺的框架。html5
Socket.IO除了支持WebSocket通信協議外,還支持許多種輪詢(Polling)機制以及其它實時通訊方式,並封裝成了通用的接口,而且在服務端實現了這些實時機制的相應代碼。Socket.IO實現的Polling通訊機制包括Adobe Flash Socket、AJAX長輪詢、AJAX multipart streaming、持久Iframe、JSONP輪詢等。Socket.IO可以根據瀏覽器對通信機制的支持狀況自動地選擇最佳的方式來實現網絡實時應用。java
Socket.IO設計的目標是構建可以在不一樣瀏覽器和移動設備上良好運行的實時應用,如實時分析系統、二進制流數據處理應用、在線聊天室、在線客服系統、評論系統、WebIM等。目前,Socket.IO已經支持主流PC瀏覽器(如IE、Safari、Chrome、Firefox、Opera等)和移動平臺上的瀏覽器(iOS平臺下的Safari、Android平臺下的基於Webkit的瀏覽器等)。git
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(服務端和客戶端通信的默認協議實現模塊)等。github
Socket.IO實現了實時、雙向、基於事件的通信機制,它解決了實時的通訊問題,並統一了服務端與客戶端的編程方式。啓動了Socket之後,就像創建了一條客戶端與服務端的管道,兩邊能夠互通有無。它還可以和Express.js提供的傳統請求方式很好的結合,便可以在同一個域名,同一個端口提供兩種鏈接方式。web
java實例代碼詳見 ----> websocket的那些事 - java client/server Hello World實例redis
常聽人說,Socket編程,直觀理解就是網絡編程。mongodb
Socket 是TCP/IP網絡的API,Socket接口定義了許多函數或例程,程式員可以用他來研發基於TCP/IP協議的網絡應用程式。編程
一、WebSocket同HTTP同樣是應用層的協議,可是它是一種雙向通訊協議,經過http協議創建鏈接,通訊則使用TCP
二、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也沿用了這個名字。