Node中的Socket.IO 简单Demo及说明

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

相关文章
相关标签/搜索