Socket.IO:支持WebSocket協議、用于實時通信和跨平臺的框架
WebSocket是HTML5的一種新通信協議,它實現了瀏覽器與服務器之間的雙向通訊。而Socket.IO是一個完全由JavaScript實現、基于Node.js、支持WebSocket的協議用于實時通信、跨平臺的開源框架,它包括了客戶端的 JavaScript和服務器端的Node.js。Socket.IO除了支持WebSocket通訊協議外,還支持許多種輪詢(Polling)機制以及其它實時通信方式,并封裝成了通用的接口,并且在服務端實現了這些實時機制的相應代碼。Socket.IO實現的Polling通信機制包括Adobe Flash Socket、AJAX長輪詢、AJAX multipart streaming、持久Iframe、JSONP輪詢等。Socket.IO能夠根據瀏覽器對通訊機制的支持情況自動地選擇最佳的方式來實現網絡實時應用。當前,Socket.IO最新版本是于2015年1月19日發布的1.3.0版本,該版本增強了穩定性和提高了性能,并修復了大量Bug。
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提供的傳統請求方式很好的結合,即可以在同一個域名,同一個端口提供兩種連接方式:
request/response, websocket(flashsocket,ajax…).
搭建Socket.IO環境需要先創建一個作為工作空間的目錄,然后安裝Node.js,并在工作空間下安裝Socket.IO(命令:npm install socket.io),這樣環境已經搭建完成。還可以安裝基于Node.js框架(如Express.js等)以協助應用的服務器端開發。
服務器段示例代碼如下:
var io = require('socket.io').listen(8080); io.sockets.on('connection', function (socket) { socket.emit('news', { hello: 'world' }); socket.on('my other event', function (data) { console.log(data); }); });
客戶端示例代碼如下:
<script src="socket.io.min.js"></script> <script> var socket = io.connect('http://localhost:8080'); socket.on('news', function (data) { console.log(data); socket.emit('my other event', { my: 'data' }); }); </script>
Socket.IO由網頁程序設計公司Automattic使用JavaScript開發并基于MIT開源協議發布。此外,社區開發者還為Socket.IO開發了一些開源插件/功能庫,如Socket.IO 1.x系列版本的Java客戶端Socket.IO-client.java,該功能庫可以用于Android的相關應用中;用于Socket.IO與iOS應用間進行通信的簡單接口SIOSocket;基于Netty的Socket.IO服務器端的Java實現Netty-socketio。有關Socket.IO更多相關信息,讀者可以登錄其官網或者托管在GitHub的主頁站點查看。
來自:http://www.infoq.com/cn/news/2015/01/socket-io-websocket