注:下面Demo的Server和Client都是純後端。 並無web頁面。git
Server端代碼:github
var express = require('express'); var app = express(); var server = require('http').createServer(app); var io = require('socket.io')(server); //定義變量,用來存儲socket。若是是多進程的話,那麼socket能夠考慮存入redis中 var socketList = {}; //客戶端鏈接服務器socket成功時觸發的事件; io.sockets.on('connection', function (socket) { //鏈接成功時,告訴客戶端鏈接成功;能夠經過send來發送信息 socket.send({status: 1}); //socket失去鏈接時觸發(包括關閉瀏覽器,主動斷開,掉線等任何斷開鏈接的狀況) socket.on('disconnect', function () { console.log("client disconnect"); //客戶端失去 for (var key in socketList) { delete socketList[key]; } }); //接收客戶端send來的信息 socket.on('message', function (data) { var areaid = data.areaid; //用來保存socket,鍵值爲區域 socketList[areaid] = socket; }); //注意:這裏是從客戶端的角度來提交事件 //socket.broadcast.to('my room').emit('event_name', data); }); //測試。延遲5S等客戶端鏈接上後發送廣播 setTimeout(broadcast,5000); function broadcast(){ //發送廣播測試,system爲約定的廣播事件 io.sockets.emit('system','broadcast test'); // 向another room廣播一個事件,在此房間全部客戶端都會收到消息 //注意:這裏是從服務器的角度來提交事件 //io.sockets.in('another room').emit('event_name', data); } server.listen(3000);
客戶端代碼:web
var express = require('express'); var app = express(); var server = require('http').createServer(app); server.listen(3001); //引用的應該是socket.io-client; var io = require('socket.io-client'); //connect函數能夠接受一個url參數,url能夠socket服務的http完整地址,也能夠是相對路徑,若是省略則表示默認鏈接當前路徑。 // 與服務端相似,客戶端也須要註冊相應的事件來捕獲信息,不一樣的是客戶端鏈接成功的事件是connect。 //若是要傳參,寫法爲var socket = io.connect('/',{ _query:'sid=123456'}); 服務器端取參數爲var sid =socket.request._query.sid; var socket = io.connect('http://127.0.0.1:3000'); socket.on('connect', function () { console.log('connect successed'); }); //socket失去鏈接時觸發(包括關閉瀏覽器,主動斷開,掉線等任何斷開鏈接的狀況) socket.on('disconnect',function(){ console.log("server disconnect"); }) //接收服務器端send來的信息 socket.on('message', function (data) { //判斷服務器發來狀態是否成功 if (data.status && data.status == 1) { //向服務器端發送信息,areaid(區域)爲隨意造的一個guid socket.send({areaid: '6676AE6E-2924-11E5-82B2-005056BBC258'}); } }); //接收系統廣播消息 socket.on('system',function(data){ console.log(data); })
Demo路徑:https://github.com/shadow88sky/socketDemo/tree/masterredis