我正在尝试向我的应用程序添加聊天室功能。在这里,我想将 projectId 设置为房间 ID,并希望套接字根据它们所属的项目加入该房间。
let roomId;
io.on("connection", (socket)=>{
socket.on("join_room_id", ({projectId})=>{
socket.join(projectId);
roomId = projectId;
})
io.to(roomId).emit("greet", {msg:"hello"}) // doesn't work
我认为 roomId 未正确存储,因此我的前端无法接收任何消息
提前致谢
io.on('connection', ...)
是一个事件处理程序。该事件在未来的未知时间发生一次或多次。因此,您不能随时拨打io.to(roomId).emit(...)
。您只能在客户端连接后(以及断开连接之前)调用它。
在父作用域中声明
roomId
并在某个未知时间发生的事件处理程序中设置它的值,以便您可以在其他地方以某种方式使用它,这种概念通常是一种反模式,因为外部代码无法知道当变量设置或未设置或仍然有效时。而且,在您的情况下,一个套接字连接将覆盖该变量的先前值。
如果您只想向新连接套接字发送消息,那么您应该将
.emit()
移动到 connection
事件处理程序内部。