node+websocket+react即时匿名通讯聊天室

mark

依赖文件如下:
node安装express3.X
websocket模块socket.io
数据库mongodb 数据库模块mongoose 直接扔代码:

#后台代码
//websocket
var apps = express();
var server = require('http').Server(apps);
var io = require('socket.io')(server);
server.listen(3001);//注意这个不是程序的端口号:是socket的端口号
io.on('connection', function (socket) {
//接受数据请求
//操作数据库
var Cat=mongoose.model('Cat',testSchema);
var Getlist=mongoose.model('Getlist',txtdb);
var roomID=0;
socket.on('join',function(data){
    var info={
        err:null,
        username:'',
        msg:'',
        rname:''
    };
    if(data.token==''||data.token=="undefined"){
        info.err=2;  //没有token
        info.msg="没有token";
        socket.emit('new',info);
        return false;
    }
    //判断是否存在房间
    Cat.find({"cryptoCode":data.token},function(err,docs){
        if(docs.length>0){
            info.rname=docs[0].name;
            info.username='匿聊'+Math.floor(Math.random()*999+1);
            roomID=data.token.split('-rn');
            socket.join(roomID); //加入房间
            //查询前10条用户数据
   Getlist.find({"code":data.token}).sort({_id:-1}).limit(10).exec(function(errs,doc){
                info.err=0; //正确状态
                info.msg="数据正确";
                doc.reverse();
                if(errs){
                    return false;
                }
                info.list=doc;
                socket.emit('new',info);
            });
        }else{
            info.err=1; //没有对应的房间
            info.msg="没有对应的房间";
            socket.emit('new',info)
        }
    });
});
socket.on('message',function(data){
    var time=new Date();
    var nowtime=time.getTime();
    var Savedata=new 
   //操作mongodb数据库      Getlist({"username":data.username,"rname":data.rname,"txt":data.txt,"code":data.code,"time":nowtime});
    Savedata.save(function(err){
        if(err){
            return false;
        }
        io.to(roomID).emit('msg',data); //给指定房间推送系统
    })
});
#前台代码
//socket
    var token=this.props.location.query.token;  //react获取url参数 
    var _this=this;
    var socket = io.connect('服务器ip:3001');
    socket.emit('join', { token: token });
    socket.on('new',function(data){
        if(data.err==0){
            _this.setState({
                username:data.username,
                list:data.list,
                rname:data.rname
            });
        }else if(data.err==2){
            window.location.hash='#/';  //没有token跳回首页
        }else{
            alert(data.msg);
        }
    });
    socket.on('msg',function(data){
        _this.state.list.push(data);
        var setlist=_this.state.list;
        _this.setState({
            list:setlist
        })
    });

以上是前后端的代码,小sam写的不好的大神路过请多多指教……

总结一下,如果会node的人来说,那么主要的是socket的应用了。前端也不一定要用react...普通的html也能实现,这个就看每个人的习惯……

socket.io的主要一些方法总结:
socket.on()//监听信息,主要两个参数,1.监听的对象名称。2.回调函数 
socket.emit()//推送信息,主要两个参数,1.监听的对象名称。2.回调函数 
io.to(roomID).emit('msg',data); //给指定房间推送系统 
io.join()//加进当前房间
原文地址:https://www.cnblogs.com/samsimi/p/6547379.html