11

我目前正在使用 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';
    });
});

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

4

2 回答 2

4

我认为您应该将这些变量存储在另一种类型的对象中。保留套接字对象仅用于通信。您可以为每个用户生成一个唯一的 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';
    });
});
于 2013-08-19T09:58:19.680 回答
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
}
于 2015-06-01T18:05:14.983 回答