我在node.js / socket.io中创建了一个类似Facebook的网络聊天应用。我有一个MySQL数据库,其中包含与节点服务器分开的用户名和好友列表。当用户登录时,我从数据库中获取他的信息并将其缓存到一个数组中。当用户离开网站时,我通过执行以下操作来处理:
delete userCache[username];
将他从缓存中删除。有时我有超过60人在聊聊这个网络聊天,我想知道使用用户名索引的数组是否对这类事情是稳定的。
-Arjun
我正在添加更多详细信息,因为我认为在阅读之后我的问题有点模糊。 我将更多地描述我的设置,以便人们可以概念化问题:
我有一个节点服务器,用于承载基于Socket.io的聊天。当用户从他们的浏览器打开聊天时,节点服务器将通过HTTPS从我们的数据库中获取用户信息,例如朋友,头像,状态。一旦服务器通过基于传入连接的cookie的https调用检索用户名,它就会将该套接字连接放在名为/ userName的房间内。
问题是,有时我会得到一个名为/ undefined的房间,这非常令人困惑,因为在我的套接字服务器的授权功能中,如果请求没有返回有效名称,我不允许连接发生。 此外,引用结构只是一个指向userCache数组中相应元素的数组。
var https = require('https');
var options = {
hostname: 'www.My-Website.com',
port: 443,
path: '/site/getName?id=' + handshakeData.query.cookie,
method: 'GET',
};
try {
var req = https.request(options, function (res) {
res.on('data', function (d) {});
});
req.end();
} catch (e) {
//console.log('request for name failed');
}
req.on('response', function (response) {
var data = '';
response.setEncoding('utf8');
response.on('data', function (chunk) {
data += chunk;
});
response.on('end', function () {
try {
var nameObj = JSON.parse(data);
var name = nameObj.username;
var profile = nameObj.profile;
if (name && name.length && name != 'undefined') {
handshakeData.myName = name;
userCache[handshakeData.query.cookie] = {
username: name,
status: 'available',
friends: {},
cookie: handshakeData.query.cookie,
profile: profile
};
references[name] = userCache[handshakeData.query.cookie];
cb(null, true);
} else {
cb('Name doesnt exist on server, sorry', false);
}
} catch (e) {
cb('Something bad happened trying to get your name, sorry', false);
}
});
});