【问题标题】:socket.io - How to join a roomsocket.io - 如何加入房间
【发布时间】:2018-05-24 17:59:06
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: javascript socket.io


    【解决方案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();
    

    【讨论】:

    • 谢谢。这就是我所做的。但是,我不确定如何访问套接字。我想通过一个 id 获得一个套接字,并让它加入一个房间。现在我通过io.sockets.connected[someId].join(someRoom) 做到这一点。我不确定这是不是最好的方法(?)
    • 如果你有一个socket id,你可以这样做io.to(socketid).emit('message', 'a message for socketid only');这也可以io.sockets.connected[socketid].emit('message', 'a message for socketid only');在这种情况下,你可能更有用的是customIds[data.userId] = socket.id;而不是customIds[socket.id] = data.userId;
    猜你喜欢
    • 1970-01-01
    • 2016-04-26
    • 1970-01-01
    • 2020-10-28
    • 2017-05-12
    • 2014-08-26
    • 1970-01-01
    • 2012-06-06
    • 2016-09-06
    相关资源
    最近更新 更多