• 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. })

  • 相关阅读:
    gin异常处理实践
    langflow agent 资料
    LeetCode 212. 单词搜索 II -- 字典树+dfs
    两日总结二十
    SQL优化
    动态链接库Dll的编写与使用
    c++中的模板(8) -- 模板和友元函数
    【Node.js实战】一文带你开发博客项目(使用假数据处理)
    微信外部APP拉起小程序
    CAS(Compare and swap)比较并交换算法解析
  • 原文地址:https://blog.csdn.net/h960822/article/details/138027488