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