做一个小小的聊天室,没事可以和自己的同学聊天,谈谈人生,下面介绍一下如何做一个聊天室
1.为了实时的获取服务器中的数据更新,可以使用轮训的方式解决问题,
常见的请求方式 get:常用来获取数据;post:常用来新增数据,此操作会修改数据的内容;delete:常用来删除数据;
put:常用来修改数据;
# socket
双工通讯。当建立socket连接之后服务器端可以向客户端主动地推送消息,websocket技术实现了可以直接在浏览器中使用socket连接,可以实现网页的实时通信。现在nodejs中使用websocket的时候建议使用socket.io
介绍第一种方式,实现聊天室
首先需要初始化一个项目,利用脚本架生成一个app.js ,代码如下
1.app.js
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', indexRouter);
app.use('/users', usersRouter);
// app.use('/api/v1/chats', require('./routes/api/v1/chats'));
// app.get('/chat', (req, res) => {
// res.render('chat')
// })
app.get('/chat-ws', (req, res) => {
res.render('chat-ws');
})
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
2.然后需要建立很多项目文件夹
bin models public routers views
然后需要建立一个文件夹,来向服务器定时的访问数据,代码如下
function getAllMessages() {
var strHrml = '
function sendMsg() {
if(!$('#txtNickName').val() && !$('#txt').val()) {
alert('请输入昵称和消息内容!')
return
}
$.post('/api/v1/chats', {
nickName: $('#txtNickName').val(),
content: $('#txt').val()
}, function(res) {
console.log(res);
getAllMessages();
})
}
// 初始化调用
getAllMessages();
setInterval(getAllMessages ,3000); // 轮训
最后建立一个Html文件来来向服务器发送数据
2.第二种方式 用socket.io 来实现聊天室,客户端可以主动地向服务端发送数据
var server = http.createServer(app);
var io = require('socket.io')(server);
io.on('connection', (socket)=> {
console.log("连接成功!!")
socket.on('sendMsg',(msg)=>{
//console.log(msg)
io.emit('receiveMsg',msg);
})
});
首先你要引入socket.io,on代表监听,emit代表触发 ,然后向服务端发送数据。
接下来是实现客户端的代码
代码只是展示了设计的思想
欢迎大家提问