数组作为Node.js实时聊天的缓存

时间:2014-05-19 20:38:48

标签: javascript node.js memory-leaks socket.io

我在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);

            }
        });
    });

0 个答案:

没有答案
相关问题