Socket.io:将消息发送到特定的房间(线程)

时间:2018-10-09 08:45:33

标签: node.js socket.io

我是Socket IO的初学者,现在我对Socket IO有一个困惑的问题,希望你们能帮助我清除它。

我开发了Socket服务器,该服务器用户可以将消息发送到特定的会议室(线程)。下面的示例是线程1 (id=1)和线程2 (id=2)

enter image description here

我的服务器

const socketEvents = (io) => {
  io.on('connection', (socket) => {
    const socketId = socket.id
    console.log(`User with ID ${socketId} connected`)
    socket.on('disconnect', () => {
      console.log(`SocketId: ${socket.id} disconnected`)
    })
    socket.on('open-thread', function(uid) {
      console.log('Join thread', uid);
      socket.join(uid);
    });
    socket.on('close-thread', function(uid) {
      console.log('Close thread', uid);
      socket.leave(uid);
    });
    socket.on('send-message', (payload) => {
      console.log('User', socket.id, 'send message into', payload.thread_uid, 'thread');
      io.to(payload.thread_uid).emit("update-thread", payload )
      //db.Message.create({ 'user_id': payload.user.id, 'thread_uid': payload.thread_uid, 'content': payload.content })
    })
  })
}

module.exports = socketEvents

还有我的客户

我听服务器更新线程的方式:

this.$socket.emit('open-thread', this.thread_uid);
this.$socket.on('update-thread', function (payload) {
  this.messageData.push({content: payload.content})
})

以及我向服务器发送新消息的方式:

this.$socket.emit('send-message', { 'user': 1, 'content': content, 'thread_uid': this.thread_uid });

我认为我的代码还可以,但是当我尝试在客户端中发送示例消息(Hello test sample)时,它不是在特定房间监听,而是在所有房间监听:

enter image description here

请给我我的错误。赞赏!

0 个答案:

没有答案