我正在编写一个聊天应用程序。现在,当用户 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/