NodeJs+webSocket搭建多人聊天室
今天花了一个上午的时间去学习了一下使用nodejs+websocket搭建多人聊天室。下面我分享下我做这个多人聊天室案例的整个过程。
先看下最终的效果图
上图的功能包括:显示在线人数,在同一房间可以互相发送消息,显示在线用户的列表.
下面我讲一步一步的分解我写的这个案例。
准备的东西:
Nodejs 的基础
node环境
熟悉npm的使用
nodejs-websocket插件
前端部分用到的websocket一些事件:
WebSocket 前端部分事件以及方法
事件处理程序描述
open Socket.onopen 连接建立时触发
message Socket.onmessage 客户端接收服务端数据时触发
error Socket.onerror 通信发生错误时触发
close Socket.onclose 连接关闭时触发
WebSocket 方法
以下是 WebSocket 对象的相关方法。假定我们使用了以上代码创建了 Socket 对象:
方法 描述
Socket.send()
使用连接发送数据
Socket.close()
关闭连接
举个例子:在建立连接时会出发ws.onopen函数,在收到服务器发来的消息时会自动触发ws.onmessage函数,
在用户关闭网页或者手动关闭连接时会触发ws.onclose函数。发送数据的时候使用ws.send函数即可,发送的内
容作为参数。具体的使用方法在后面会讲到。
后端部分用到的websocket:
connect.on('text',callback)
connect.on('close',callback)
connect.on('error',callback)
第一步:安装插件并且完善服务端
创建一个js文件命名为app.js
并且进入命令行模式执行 :
安装nodejs-websocke插件
npm install nodejs-websocket --save
app.js文件:
const ws = require('nodejs-websocket');
const htpp = require('http');
//const server = http.createServer();
//封装发送消息的函数(向每个链接的用户发送消息)
const boardcast = (str)=>{
console.log(str);
server.connections.forEach((connect)=>{
connect.sendText(str)
})
};
//封装获取所有聊天者的nickname
const getAllChatter = ()=>{
let chartterArr = [];
server.connections.forEach((connect)=>{
chartterArr.push({
name:connect.nickname})
});
return chartterArr;
};
const server = ws.createServer((connect)=>{
//链接上来的时候
connect.on('text',(str)=>{
let data = JSON.parse(str);
console.log(data);
switch (data.type)
{
case 'setName':
connect.nickname = data.nickname;
boardcast(JSON.stringify({
type:'serverInformation',
message:data.nickname+"进入房间",
}));
boardcast(JSON.stringify({
type:'chatterList',
list:getAllChatter()
}));
break;
case 'chat':
boardcast(JSON.stringify({
type:'chat',
name:connect.nickname,
message: data.message
}));
break;
default:
break;
}
});
//关闭链接的时候
connect.on('close',()=>{
//离开房间
boardcast(JSON.stringify({
type:'serverInformation',
message:connect.nickname+'离开房间'
}));
//从在线聊天的人数上面除去
boardcast(JSON.stringify({
type:'chatterList',
list: getAllChatter