Node.js + Socket.io在套接字中存储数据

时间:2013-08-19 09:49:19

标签: node.js sockets socket.io

我目前正在使用node.js和使用socket.io模块构建应用程序。当用户连接时,我将特定于用户的数据存储在其套接字上。例如

io.sockets.on('connection', function (socket) {

    socket.on('sendmessage', function (data, type) {

        socket.variable1 = 'some value';
        socket.variable2 = 'Another value';
        socket.variable3 = 'Yet another value';
    });
});

虽然这有效但我的问题是,这是一个很好的方法。我有效地存储会话数据,但有更好的方法吗?

2 个答案:

答案 0 :(得分:3)

我认为您应该将这些变量存储在另一种类型的对象中。保留套接字对象仅用于通信。您可以为每个用户生成唯一ID并创建地图。像这样:

var map = {},
numOfUsers = 0;

io.sockets.on('connection', function (socket) {
    numOfUsers += 1;
    var user = map["user" + numOfUsers] = {};
    socket.on('sendmessage', function (data, type) {
        user.variable1 = 'some value';
        user.variable2 = 'Another value';
        user.variable3 = 'Yet another value';
    });
});

答案 1 :(得分:1)

更新:io.set()io.get()方法已弃用

合理的方法是选择数据存储并将每个数据与唯一的套接字标识符(例如id)相关联。

推荐的方法是使用本机socket.setsocket.get来专门设置和获取数据到当前套接字。

按照你的例子:

io.sockets.on('connection', function (socket) {

    socket.on('sendmessage', function (data, type) {

        socket.set('variable1', 'some value');
        socket.set('variable2', 'Another value');
        socket.set('variable3', 'Yet another value');
    });
});

此外,您可以在设置值后异步调用函数:

...
socket.set('variable1', 'some value', function () {
    /* something to be done after "variable1" is set */
});
...

最后,您可以检索变量:

...
var variable1 = socket.get('variable1')
...

或者在需要时直接使用它:

if ( socket.get('age') > 30 ) {
    // Vida longa às eleições presidenciais diretas no Brasil
}