websocket聊天的功能

第一步 安装相关依赖:

node需要安装: npm i socket.io

第二步 前端cdn引入socket

第三步 编写服务端的代码 

import http from 'node:http‘'

import {Server} from 'socket.io'

const server = http.createServer()

const io = new Server(server,{

cors:true  // 允许跨域

})

//事件模型驱动
io.on('connection',socket=>{console.log('连接成功')})


server.listen(3000,()=>{console.log('server is running at 3000')})

第四步 前端链接成功的代码

第五步 前端发送消息

第六步 后端接收

开始做聊天的案例:

后端思路的分析:需要定义一个数据格式: 里面有几个房间 每个房间有几个人

const groupMap = {}

数据格式:{

1:[{name,room, id},{name,room,id}]

2:[{name,room, id},{name,room,id}]

}

后端代码:

const groupMap = {}

io.on('connection',socket=>{

    // 创建房间号的逻辑

    socket.on('join',({name,room})=>{

        if(groupMap[room]){

            groupMap[room].push({name,room,id:socket.id})//已有就push

        }else{

            groupMap[room]=[{name,room,id:socket.id}]//没有就默认创建
        }
        
        socket.emit('groupMap',groupMap)//浏览器为维度   
                 
        socket.broadcast.emit('groupMap',grolpMap)//所有人都能看到

        //管理员发个消息
          
        socket.broadcast.to(room).emit('message',name:"管理员”

         message:`欢迎${name}进入聊天室`,
    })

    // 发消息的逻辑

     socket.on('message',({ name,message,room })=>{

         socket.broadcast,to(room).emit("message',{ name, message })

    })

})

前端的代码

socket.on('connect',()=>{

    // 1 加入房间
    
    socket.emit('join',{name,room})  // name是名称 room是房间号

    // 2 gropMap 房间的信息, 将所有的房间渲染出来, 结构就是gropMap的结构

    socket.on('groupMap',(data)=>{

         // 渲染到前面左侧房间列表

        const roomList = document.queryselect('.roomList')    

        Object.keys(data).forEach(key=>{

            const item = document.createElement('div')

            item.className ='groupList-items'

            item.innerHTML=房间号:${key}房间人数:${data[key].length}

            roomList.appendChild(item)
        
        })
    
    })

    // 3 监听发送消息的事件

    document.addEventListener('keydown',(e)=>{

        if(e.key === 'Enter' ){


        const message = ipt.innerText

        socket.emit('message', {name,message,room})

        addCount(message) // 这个方法是把自己发送的消息追加到消息的列表中

        ipt.innerText = ''
    })


    // 4 监听接送的消息

    socket.on('message',(data)=>{

         addCount(data) // 将数据 追加到消息列表中

    })


})

相关推荐

最近更新

  1. Ubuntu 添加so库搜索路径

    2024-04-22 07:04:03       0 阅读
  2. 文件格式是.pb应该怎么查看?

    2024-04-22 07:04:03       0 阅读
  3. 高考假期预习指南

    2024-04-22 07:04:03       0 阅读
  4. YOLOv5/v7 应用轻量级通用上采样算子CARAFE

    2024-04-22 07:04:03       1 阅读
  5. 探索Hash Router:构建单页应用的基石

    2024-04-22 07:04:03       1 阅读

热门阅读

  1. 搜索引擎中的倒排索引是什么

    2024-04-22 07:04:03       11 阅读
  2. 【数据结构】冒泡排序

    2024-04-22 07:04:03       14 阅读
  3. docker安装mysql,允许远程连接

    2024-04-22 07:04:03       15 阅读
  4. React Router 6 路由重定向与编程式导航指南

    2024-04-22 07:04:03       13 阅读
  5. 第4章 EC2 - 4.3 密钥对

    2024-04-22 07:04:03       14 阅读
  6. 欧鹏RHCE 第三次作业

    2024-04-22 07:04:03       12 阅读
  7. Pytorch或Tensorflow 深度学习库安装 (简易版)

    2024-04-22 07:04:03       14 阅读
  8. JVM 引用的分类

    2024-04-22 07:04:03       16 阅读
  9. vue3 依赖-组件tablepage-vue3版本1.0.2更新内容

    2024-04-22 07:04:03       15 阅读
  10. Css切换不同窗口

    2024-04-22 07:04:03       12 阅读
  11. 统一建模语言UML图

    2024-04-22 07:04:03       14 阅读