• websocket聊天的功能


    第一步 安装相关依赖:

    node需要安装: npm i socket.io

    第二步 前端cdn引入socket

    第三步 编写服务端的代码 

    1. import http from 'node:http‘'
    2. import {Server} from 'socket.io'
    3. const server = http.createServer()
    4. const io = new Server(server,{
    5. cors:true // 允许跨域
    6. })
    7. //事件模型驱动
    8. io.on('connection',socket=>{console.log('连接成功')})
    9. 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}]

    }

    后端代码:

    1. const groupMap = {}
    2. io.on('connection',socket=>{
    3. // 创建房间号的逻辑
    4. socket.on('join',({name,room})=>{
    5. if(groupMap[room]){
    6. groupMap[room].push({name,room,id:socket.id})//已有就push
    7. }else{
    8. groupMap[room]=[{name,room,id:socket.id}]//没有就默认创建
    9. }
    10. socket.emit('groupMap',groupMap)//浏览器为维度
    11. socket.broadcast.emit('groupMap',grolpMap)//所有人都能看到
    12. //管理员发个消息
    13. socket.broadcast.to(room).emit('message',name:"管理员”
    14. message:`欢迎${name}进入聊天室`,
    15. })
    16. // 发消息的逻辑
    17. socket.on('message',({ name,message,room })=>{
    18. socket.broadcast,to(room).emit("message',{ name, message })
    19. })
    20. })

    前端的代码

    1. socket.on('connect',()=>{
    2. // 1 加入房间
    3. socket.emit('join',{name,room}) // name是名称 room是房间号
    4. // 2 gropMap 房间的信息, 将所有的房间渲染出来, 结构就是gropMap的结构
    5. socket.on('groupMap',(data)=>{
    6. // 渲染到前面左侧房间列表
    7. const roomList = document.queryselect('.roomList')
    8. Object.keys(data).forEach(key=>{
    9. const item = document.createElement('div')
    10. item.className ='groupList-items'
    11. item.innerHTML=房间号:${key}房间人数:${data[key].length}
    12. roomList.appendChild(item)
    13. })
    14. })
    15. // 3 监听发送消息的事件
    16. document.addEventListener('keydown',(e)=>{
    17. if(e.key === 'Enter' ){
    18. const message = ipt.innerText
    19. socket.emit('message', {name,message,room})
    20. addCount(message) // 这个方法是把自己发送的消息追加到消息的列表中
    21. ipt.innerText = ''
    22. })
    23. // 4 监听接送的消息
    24. socket.on('message',(data)=>{
    25. addCount(data) // 将数据 追加到消息列表中
    26. })
    27. })

  • 相关阅读:
    04 卷积神经网络搭建
    20230830比赛总结
    河北吉力宝以步力宝健康鞋引发的全新生活生态商
    web课程设计网页规划与设计 html+css+javascript+jquery+bootstarp响应式游戏网站Bootstrap模板(24页)
    计算机毕业设计——基于html汽车商城网站页面设计与实现论文源码ppt(35页) HTML+CSS+JavaScript
    vue模板语法(上)
    反射机制(Reflection)
    Leetcode 2713. 矩阵中严格递增的单元格数(DFS DP)
    Mac入门 使用brew安装软件
    黄金投资新手指南:投资现货黄金怎样开户?
  • 原文地址:https://blog.csdn.net/h960822/article/details/138027488