我有两个或多个客户端连接到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 !')
...
})
除活动客户端(发送初始邮件的客户端)之外的所有客户端都收到了消息。
为什么主客户没有收到消息,以及如何使它收到消息?
答案 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(...)
来将响应发送给每个人,包括发射器。