我的毕设打算做一个实时聊天这样一个系统,找了下相关的教程和思路,接下来会尝试使用express+socket.io搭建一个简单的聊天室,这里暂时不使用数据库,使用cookie来存储相关数据。
参考教程:https://github.com/nswbmw/N-chat,
有关api参考官方文档,
关于res.cookie参考本篇博文:https://segmentfault.com/a/1190000004139342?_ea=504710
今天做到第一部分,socket.io基础和登陆功能实现
IDE:vscode
express版本:3.3.1
socket.io版本:0.9.7
part1 一个基础的socket.io实例演示
//#client
var socket = io.connect('http:/localhost');
socket.on('news',function (data) {
console.log(data);
socket.emit('my other event',{my : 'data'});
})
//#server
var app = require('express')();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);
server.listen(80);
app.get('/',function (req,res) {
res.sendfile(__dirname+'/index.html');
});
io.socket.on('connection',function (socket) {
socket.emit('news',{hello:'world'});
socket.on('my other event',function (data) {
console.log(data);
})
})
socket.io的核心方法其实就是emit和on,然后通过事件驱动这样的方式来完成对流对象的读写等操作,具体的api可查阅相关文档。
part2 登陆功能实现,这里插一张流程图,看的会比较清晰
ok,接下来具体代码
'use strict';
var express = require("express");
var http = require('http');
var path = require('path');
var app = express();
app.set('port',process.env.PORT||3000);
app.set('views',__dirname + "/views");
app.use(express.bodyParser());
app.use(express.cookieParser());
var users = {};//存储在线用户列表的对象
app.get('/',function(req,res){
if(req.cookies.user === null){
res.redirect('/signin');
}else{
res.sendfile('views/index.html');
}
});
app.get('/signin',function(req,res){
res.sendfile('views/signin.html');
});
app.post('/signin',function(req,res){
if (users[req.body.name]) {
res.redirect('/signin');
} else {
res.cookie("user",req.body.name,{maxAge: 1000*60*60*24*30});
res.redirect('/');
}
})
以上,待续