前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >nodejs-websocket代码nodejs版本

nodejs-websocket代码nodejs版本

原创
作者头像
conanma
发布2022-01-04 17:51:34
发布2022-01-04 17:51:34
2.8K00
代码可运行
举报
文章被收录于专栏:正则正则
运行总次数:0
代码可运行

nodejs-websocket代码nodejs版本

代码语言:javascript
代码运行次数:0
复制
function websocket(server) {
    var io = require('socket.io')(server);
  var Message = require('../models/message')
    var users = {}

    io.on('connection', function (socket) {

      //监听用户发布聊天内容
  socket.on('message', function (obj) {
        //向所有客户端广播发布的消息
  var mess = {
          username: obj.username,
  src:obj.src,
  msg: obj.msg,
  img: obj.img,
  roomid: obj.room,
  time: obj.time
  }
        io.to(mess.roomid).emit('message', mess)
        global.logger.info(obj.username + '对房' + mess.roomid+'说:'+ mess.msg)
        // console.log(obj.username + '对房' + mess.roomid+'说:'+ mess.msg)
  if (obj.img === '') {
          var message = new Message(mess)
          message.save(function (err, mess) {
            if (err) {
              // console.log(err)
  global.logger.error(err)
            }
            // console.log(mess)
  global.logger.info(mess)
          })
        }
      })
      socket.on('login',function (obj) {
        socket.name = obj.name
  socket.room = obj.roomid
  if (!users[obj.roomid]) {
          users[obj.roomid] = {}
        }
        users[obj.roomid][obj.name] = obj
        socket.join(obj.roomid)
        io.to(obj.roomid).emit('login', users[obj.roomid])
        global.logger.info(obj.name + '加入了' + obj.roomid)
      })
      socket.on('logout',function (obj) {
        try{
          const is = Object.hasOwnProperty.call(users[obj.roomid], obj.name)
          if (is) {
            delete users[obj.roomid][obj.name]
            global.logger.info(obj.name + '退出了' + obj.roomid)
            io.to(obj.roomid).emit('logout', users[obj.roomid])
            socket.leave(obj.roomid)
          }
        }
        catch (e) {
          global.logger.error(e)
        }
      })

      socket.on('disconnect', function () {
        console.log(socket.room, socket.name);
  if (users[socket.room] && users[socket.room].hasOwnProperty(socket.name)) {
          delete users[socket.room][socket.name]
          // 用户监听用退出聊天室
  global.logger.info(socket.name + '退出了' + socket.room)
          socket.leave(socket.roomid)
          io.to(socket.room).emit('logout', users[socket.room])
        }
      })
    })
}

module.exports = websocket

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档