Socket.io向所有客户端发出消息,但最初发出原始消息的客户端除外

时间:2018-06-24 13:02:49

标签: javascript node.js websocket socket.io

我有两个或多个客户端连接到Socket.io房间,客户端#1发出如下消息:

export function appendChild({ item }){
  socket.emit(APPEND_CHILD, { item })
  return {
    type: APPEND_CHILD,
  }
}

此成功发送到服务器的消息如下:

socket.on('APPEND_CHILD', async ({ item }) => {
  ...
  socket.in(socket.handshake.query.room).emit('APPEND_CHILD_AFTER_EFFECT', { payload: { log, parentLog }, socketId: socket.id })
})

请注意,要触发此操作,我使用一种消息类型,而对所有客户端执行ping操作,则使用不同的消息,当发送该消息时,所有客户端均应接收该消息,并且它们都将更新其状态。

客户端侦听这样的传入消息:

socket.on('APPEND_CHILD_AFTER_EFFECT', ({ payload, socketId }) => {
        console.log('test !')
        ...
      })

除活动客户端(发送初始邮件的客户端)之外的所有客户端都收到了消息。

为什么主客户没有收到消息,以及如何使它收到消息?

1 个答案:

答案 0 :(得分:0)

Discord的@ guico33注意到,向所有客户端发送对象时,我使用的是socket对象而不是io

io.on('connect', socket => {
    socket.on('event', message => { 
        socket.in(room).emit(...) 
    })
})

应该看起来像这样:

  io.in(socket.handshake.query.room).emit(message, data)

而不是:

  socket.in(socket.handshake.query.room).emit(message, data)

我应该使用socket.in(room).emit(...)而不是io.in(room).emit(...)来将响应发送给每个人,包括发射器。