我使用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])
,以便它可以將數據發回自己。