Eri*_*uan 2 node.js express socket.io
我正在使用 socket.io 创建投票功能。套接字通过channelId. 每当房间中的任何插座发出vote事件时,我都会尝试将电流vote-list发送到该房间中的所有插座。
我的问题是,如果我在同一个房间里有套接字 A、B、C,则来自套接字 A 的投票对 B 和 C 可见(即on.('vote')调用B 和 C 的侦听器),但对 A 本身不可见。
我期望发生的是,如果套接字 A、B、C 位于同一个房间,并且 A 发出 a vote,vote则将调用所有套接字 A、B、C侦听器。
客户:
这些侦听器是在方法中定义的,但为了清楚起见,我将它们单独列出。定义了所有变量。
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)
});
Run Code Online (Sandbox Code Playgroud)
服务器
module.exports = (app,server) => { var io = require('socket.io')(server);
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
})
});
Run Code Online (Sandbox Code Playgroud)
};
我目前的解决方法是添加socket.emit('vote',STORE[channelId]),以便它可以将数据发送回自身。
这是在 socket.io API 中设计的。您使用的这个表格:
socket.to(channelId).emit(...)
Run Code Online (Sandbox Code Playgroud)
专门设计用于发送到 channelId 房间中的所有套接字,除了socket。
如果你想发送给那个房间里的所有用户,那么把上面的代码改成:
io.to(channelId).emit(...)
Run Code Online (Sandbox Code Playgroud)
这是socket.io 文档中socket.to()的一段引用:
为随后的事件发射设置一个修饰符,该事件将只广播给加入给定房间的客户端(套接字本身被排除在外)。
| 归档时间: |
|
| 查看次数: |
1673 次 |
| 最近记录: |