我目前正在使用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';
});
});
虽然这有效但我的问题是,这是一个很好的方法。我有效地存储会话数据,但有更好的方法吗?
答案 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.set
和socket.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
}