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
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值