我正在写一个聊天应用程序。现在,当用户A发起用户A和用户b之间的新会话时,用户A向用户B的userId发送套接字消息到服务器。
服务器检查两个用户之间是否存在会话,如果没有,则创建一个会话,并让用户A加入新会话(clientA.join(newConversationId))。但是,如果用户B现在实际上已连接套接字,我也不知道如何让用户B加入房间。
我认为可能有用的是保持一个对象映射userId到socket.id,所以我可以通过B的userId和A的原始消息一起获得用户B的套接字ID。然后我将通过其套接字ID获取B的套接字,并让它加入对话。
问题是,我不知道如何通过套接字ID获取套接字。我认为没有这方面的官方文件。还是有其他更好的方法来处理这样的事情?
答案 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();