javascript - socket.io - 如何加入房间

标签 javascript socket.io

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

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

我认为可能有效的方法是将 userId 映射到 socket.id 的对象,这样我就可以通过与 A 的原始消息一起发送的 B 的 userId 来获取用户 B 的套接字 id。然后我将通过套接字 ID 获取 B 的套接字,并让它也加入对话。

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

最佳答案

是的,您必须跟踪您的用户 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();

关于javascript - socket.io - 如何加入房间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47749086/

相关文章:

javascript - Sails.js - 从套接字数据更新变量

javascript - 具有不同形状的交叉过滤数据

php - 在ajax中混合javascript和php变量

node.js - "Error: Cannot find module"当使用 browserify 将 socket.io 依赖项与 --node 标志捆绑在一起时

javascript - RxJS 在没有订阅者时释放资源,在有新订阅者时创建

javascript - 套接字客户端返回变量

javascript - 创建 React 组件的不同实例

javascript - jQuery 中的“没有类”选择器。通过包含多个类的特定类名选择一个元素

javascript - 如何在数组中循环每个 idx 的对象属性?

javascript - Phonegap 是否在 3.5.0-0.20.10 版本中集成了 socket.io?