注:下面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