使用socket.io时,可以通过以下步骤访问已登录的用户:
以下是一个示例代码,展示了如何在使用socket.io时访问已登录的用户:
// 服务器端代码
const io = require('socket.io')(server);
// 存储已登录用户信息的数据结构
const loggedInUsers = {};
io.on('connection', (socket) => {
// 监听用户登录事件
socket.on('login', (userId) => {
// 将用户ID与socket连接关联起来
loggedInUsers[userId] = socket;
});
// 监听用户发送消息事件
socket.on('message', (data) => {
// 从消息中获取目标用户ID
const targetUserId = data.targetUserId;
// 查找目标用户的socket连接
const targetSocket = loggedInUsers[targetUserId];
// 向目标用户发送消息
targetSocket.emit('message', data.message);
});
// 监听用户断开连接事件
socket.on('disconnect', () => {
// 在用户断开连接时,从已登录用户信息中移除该用户
const userId = Object.keys(loggedInUsers).find(key => loggedInUsers[key] === socket);
delete loggedInUsers[userId];
});
});
// 客户端代码
const socket = io.connect();
// 用户登录
socket.emit('login', userId);
// 发送消息给特定用户
socket.emit('message', { targetUserId: targetUserId, message: 'Hello!' });
// 监听消息事件
socket.on('message', (message) => {
console.log('Received message:', message);
});
在上述示例代码中,服务器端使用一个哈希表loggedInUsers
来存储已登录用户的信息。当用户登录时,将其用户ID与socket连接关联起来,并存储在loggedInUsers
中。当用户发送消息时,服务器端根据目标用户ID查找对应的socket连接,并向该连接发送消息。当用户断开连接时,从loggedInUsers
中移除该用户的信息。
请注意,上述示例代码仅为演示目的,实际应用中可能需要更复杂的逻辑来处理用户登录、断开连接等情况。此外,还可以根据具体需求添加身份验证、权限控制等功能来增强安全性。
领取专属 10元无门槛券
手把手带您无忧上云