Socket.io 客户端未接收到来自服务器的发射
Socket.io emit from server is not being received by client
我最近一直在尝试使用套接字,但我 运行 遇到了一个我不确定为什么会发生的错误。
我用一个名为 createRoom 的按钮创建了一个索引页面,它尝试创建一个 lobby/room 其他用户可以在其中连接。
//index.js
createBtn.addEventListener('click', () => {
socket.emit("create-room", socket.id)
})
socket.on("redirect-host", roomId=>{
console.log("I JUST CREATED: " + roomId);
window.location.replace("/master") //lobby
})
//server.js
io.on("connection", socket => {
console.log("a user connected");
socket.on("create-room", hostId => { //receives the id of the person creating lobby
let roomId = Math.round(Math.random() * (999999 - 100000) + 100000);
socket.join(roomId)//generates room and then sends emit back to redirect host
console.log("Socket " + hostId + " created room: " + roomId);
socket.to(hostId).emit('redirect-host', roomId);
})
})
在索引中,有一个按钮,您可以单击它来生成一个房间,该按钮会向服务器发送一个创建房间,然后服务器会创建一个房间并返回房间号,并告诉 server.js 重定向到一个大厅屏幕 (/master).
但是,按下按钮后似乎没有任何反应。我的主要怀疑是“redirect-host”被发送到错误的地方,但我又是套接字的新手,所以我不能确定。
谢谢。
编辑:已解决!对于任何想知道的人,参数“socket”是连接的套接字。根据 socketio 文档,.to 将 emit 发送给除自身以外的所有人
改为使用,
io.in(roomId).emit('redirect-host', roomId);
Socket代表连接的套接字本身。查看文档:
// to all clients in room1 except the sender
socket.to("room1").emit(/* ... */);
相反,我相信您希望服务器向房间中的所有客户端发送一些内容。为此,使用 io.in
io.in(roomId).emit('redirect-host', roomId);
我最近一直在尝试使用套接字,但我 运行 遇到了一个我不确定为什么会发生的错误。
我用一个名为 createRoom 的按钮创建了一个索引页面,它尝试创建一个 lobby/room 其他用户可以在其中连接。
//index.js
createBtn.addEventListener('click', () => {
socket.emit("create-room", socket.id)
})
socket.on("redirect-host", roomId=>{
console.log("I JUST CREATED: " + roomId);
window.location.replace("/master") //lobby
})
//server.js
io.on("connection", socket => {
console.log("a user connected");
socket.on("create-room", hostId => { //receives the id of the person creating lobby
let roomId = Math.round(Math.random() * (999999 - 100000) + 100000);
socket.join(roomId)//generates room and then sends emit back to redirect host
console.log("Socket " + hostId + " created room: " + roomId);
socket.to(hostId).emit('redirect-host', roomId);
})
})
在索引中,有一个按钮,您可以单击它来生成一个房间,该按钮会向服务器发送一个创建房间,然后服务器会创建一个房间并返回房间号,并告诉 server.js 重定向到一个大厅屏幕 (/master).
但是,按下按钮后似乎没有任何反应。我的主要怀疑是“redirect-host”被发送到错误的地方,但我又是套接字的新手,所以我不能确定。
谢谢。
编辑:已解决!对于任何想知道的人,参数“socket”是连接的套接字。根据 socketio 文档,.to 将 emit 发送给除自身以外的所有人
改为使用,
io.in(roomId).emit('redirect-host', roomId);
Socket代表连接的套接字本身。查看文档:
// to all clients in room1 except the sender
socket.to("room1").emit(/* ... */);
相反,我相信您希望服务器向房间中的所有客户端发送一些内容。为此,使用 io.in
io.in(roomId).emit('redirect-host', roomId);