1. 程式人生 > >Socket.IO:支援WebSocket協議、用於實時通訊和跨平臺的框架

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實現了實時、雙向、基於事件的通訊機制,它解決了實時的通訊問題,並統一了服務端與客戶端的程式設計方式。啟動了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的主頁站點檢視。

感謝郭蕾對本文的審校。