socket.io - 如何加入一个房间

时间:2017-12-11 08:43:41

标签: javascript socket.io

我正在写一个聊天应用程序。现在,当用户A发起用户A和用户b之间的新会话时,用户A向用户B的userId发送套接字消息到服务器。

服务器检查两个用户之间是否存在会话,如果没有,则创建一个会话,并让用户A加入新会话(clientA.join(newConversationId))。但是,如果用户B现在实际上已连接套接字,我也不知道如何让用户B加入房间。

我认为可能有用的是保持一个对象映射userId到socket.id,所以我可以通过B的userId和A的原始消息一起获得用户B的套接字ID。然后我将通过其套接字ID获取B的套接字,并让它加入对话。

问题是,我不知道如何通过套接字ID获取套接字。我认为没有这方面的官方文件。还是有其他更好的方法来处理这样的事情?

1 个答案:

答案 0 :(得分:1)

是的,您必须跟踪您的用户ID。 这段代码可能对你有所帮助。

var io = require("socket.io").listen(conf.port);

var customIds = [];

io.on("connection", function (socket) {
	
  socket.on("login" function (data) {
    customIds[socket.id] = data.userId;
  });


  /**
   * Executes when a client disconnect.
   * It deletes this client and updates and emits the client new client list
   */
  socket.on("disconnect", function () {
      // leave the current room
      //socket.leave(socket.room);
      // emit event
      //socket.broadcast.to(socket.room).emit("clientDisconnected",customIds[socket.id]));
      // delete the custom id from the custom id array.
      customIds.splice(socket.id, 1);
  });
}

您也可以像这样保存您的用户ID(不要修改socket.id)

socket.userId=XXXX

获取客户列表并查找您需要的用户ID

io.sockets.clients();