【发布时间】:2018-06-24 13:02:49
【问题描述】:
我有两个或多个客户端连接到 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 !')
...
})
除活动(发送初始发射的那个)之外的所有客户端都收到消息。
为什么主客户端没有收到消息以及如何做到这一点?
【问题讨论】:
-
对我来说似乎合乎逻辑的是,发送事件的客户端不需要通知......
-
@James 在大多数情况下确实如此,但在某些情况下您需要它,特别是如果您需要来自服务器的一些数据。具体就我而言,我需要客户端请求操作,然后服务器将使用客户端的输入并创建对象,然后将该对象发送给所有客户端,以便他们可以更新他们的 UI,包括发送者。 (这样我可以避免重复创建对象的逻辑)
标签: javascript node.js websocket socket.io