Socket.IO 是一個面向實時 web 應用的JavaScript庫。它使得服務器和客戶端之間實時雙向的通訊成爲可能。他有兩個部分:在瀏覽器中運行的客戶端庫,和一個面向Node.js的服務端庫。二者有着幾乎同樣的API。像Node.js同樣,它也是事件驅動的.web
Socket.IO 主要使用WebSocket協議。可是若是須要的話,Socket.io能夠回退到幾種其它方法,例如Adobe Flash Sockets,JSONP拉取,或是傳統的AJAX拉取,而且在同時提供徹底相同的接口。儘管它能夠被用做WebSocket的包裝庫,它仍是提供了許多其它功能,好比廣播至多個套接字,存儲與不一樣客戶有關的數據,和異步IO操做。redis
Socket.io並非一個基本的、獨立的、可以回退到其它實時協議的WebSocket庫,它其實是一個依賴於其它實時傳輸協議的自定義實時傳輸協議的實現。該協議的協商部分使得支持標準WebSocket的客戶端不能直接鏈接到Socket.io服務器,而且支持Socket.io的客戶端也不能與非Socket.io框架的WebSocket或Comet服務器通訊。於是,Socket.io要求客戶端與服務器端均須使用該框架瀏覽器
WebSocket使得客戶端和服務器之間的數據交換變得更加簡單,容許服務端主動向客戶端推送數據.在WebSocketAPI中,瀏覽器和服務器只須要完成一次握手,二者之間就直接能夠創建持久性的鏈接,並進行雙向數據傳輸。bash
由於http/1.0 沒有alive狀態 只有http/1.1支持websocket服務器
如今,不少網站爲了實現推送技術,所用的技術都是輪詢。輪詢是在特定的的時間間隔(如每1秒),由瀏覽器對服務器發出HTTP請求,而後由服務器返回最新的數據給客戶端的瀏覽器。這種傳統的模式帶來很明顯的缺點,即瀏覽器須要不斷的向服務器發出請求,然而HTTP請求可能包含較長的頭部,其中真正有效的數據可能只是很小的一部分,顯然這樣會浪費不少的帶寬等資源。websocket
首先,建立socket框架
var socketIO = require('socket.io');
var http = require('http');
var app = http.createServer(handler).listen(8080);
function handler (req, res) {
//pass
}
var io = socketIO.listen(app);
//設置一個定時器
setTimeout(function(){
//向固定的用戶發送消息 socket.id 可使用redis與用戶主鍵作關聯
io.sockets.connected['socket.id'].emit("event", data);
// If you using Socket.io < 1.0, you need to use io.sockets.socket instead
}, 5000);
io.sockets.on('connection', function(socket) {
socket.on........
socket.emit.......
})
複製代碼