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()//加进当前房间