注:下面Demo的Server和Client都是純后端。 並沒有web頁面。
Server端代碼:
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);
客戶端代碼:
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/master