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()//加進當前房間

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM