套接字加入后无法发送到特定房间

问题描述 投票:0回答:1

我正在尝试向我的应用程序添加聊天室功能。在这里,我想将 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 未正确存储,因此我的前端无法接收任何消息

提前致谢

node.js websocket socket.io
1个回答
0
投票

io.on('connection', ...)
是一个事件处理程序。该事件在未来的未知时间发生一次或多次。因此,您不能随时拨打
io.to(roomId).emit(...)
。您只能在客户端连接后(以及断开连接之前)调用它。

在父作用域中声明

roomId
并在某个未知时间发生的事件处理程序中设置它的值,以便您可以在其他地方以某种方式使用它,这种概念通常是一种反模式,因为外部代码无法知道当变量设置或未设置或仍然有效时。而且,在您的情况下,一个套接字连接将覆盖该变量的先前值。

如果您只想向新连接套接字发送消息,那么您应该将

.emit()
移动到
connection
事件处理程序内部。

© www.soinside.com 2019 - 2024. All rights reserved.