我使用socket.io创建了一个投票功能。插座由channelId
放入房间。每当房间中的任何插座发出vote
事件时,我都会尝试将当前的vote-list
发送到该房间中的所有插座。套接字发射到房间除了发送者之外的所有套接字
我的问题是,如果我在同一个房间中有套接字A,B,C,来自套接字A的选票对B和C可见(即B和C的on.('vote')
侦听器被调用),但不是A本身。
我想要发生的事情是,如果套接字A,B,C在同一个房间中,并且A发出一个vote
,则将调用所有套接字A,B,C vote
的听众。
客户:
这些侦听器方法中定义,但我他们挑出来的清晰度。所有变量都已定义。
const socket = io('https://localhost:3001')
socket.emit('join-channel',{
channelId: payload.channelId,
senderId: socket.id
})
socket.emit('vote',{
senderId: socket.id,
channelId: state.channelId,
vote: payload.vote,
userId: state.userId
})
socket.on(`vote`, function (data) {
store.commit(MUTATIONS.SET_VOTES, data)
});
服务器
module.exports =(应用程序,服务器)=> { 变种IO =要求( 'socket.io')(服务器);
io.on('connection', function (socket) {
socket.on('join-channel',data=>{
socket.join(data.channelId)
})
socket.on('vote',data=>{
postVote(data)
let { channelId } = data
socket.to(channelId).emit(`vote`,STORE[channelId])
//socket.emit(`vote`,STORE[channelId]) //My workaround so that the socket's messages are emitted back to itself
})
});
};
我目前的解决方法是添加socket.emit('vote',STORE[channelId])
,以便它可以将数据发回自己。