-beginner-多个用户和变量的麻烦

时间:2014-04-03 09:19:53

标签: node.js variables

我正在尝试构建一个处理像powerpoint这样的表单的模块(幻灯片幻灯片)我在Json文件中描述了我的表单。

当用户连接时,我会阅读json并向他提供第一个问题。当用户点击next按钮时,我会在我的计数器上进行迭代并向他提供第二个问题。

对于一个用户来说效果很好。

但我开始意识到当两个用户连接时,他们共享同一个计数器。

这是一个问题。

为了解决此问题: 我可以使用array处理session ID来识别每个用户。但我很确定有更好的方法可以做到这一点。

显然我是node.js的初学者

我在app.js做什么

io.sockets.on('connection', function(socket) {
    var form = require('./controllers/form');
    form.init();

    socket.on('next', function(data) {
        socket.emit('next', form.next());
    });
});

我的form.js的一部分,让您更好地理解我的问题:

var formController = {
    'form': [],
    'lookup_part_iterator': 0,
    'lookup_diapo': {},
    'lookup_diapo_iterator': 0,
    'init': function() {//stuff},
    'next': function() {//stuff},
    'end': function() {//stuff},
    'get_next_slide': function() {//stuff},
    'iterate_slide': function() {//stuff},
    'iterate_part': function() {//stuff},

}

2 个答案:

答案 0 :(得分:1)

使用socket.set(key, value, cb)socket.get(key, function(err, value){...})

更新:在上下文中添加了整个内容。

io.sockets.on('connection', function(socket) {
    var form = require('./controllers/form');
    form.init();
    socket.set("form", form)

    socket.on('next', function() {
        socket.get('form', function(err, form) {
            // HANDLE THE ERR, usually just something like if(err){ return }
            socket.emit('next', form.next());
        });
    });
});

答案 1 :(得分:0)

我设法做到了,但是如果有人知道更好的方法来解释它,我会感到不满意。 在app.js中:

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

var form = require('./controlers/form');
form.init();
var form_copy = _.extend({},form);
    socket.set( socket.id, form_copy, function() {
    console.log("form setted");
    socket.on('next', function(data) {
        console.log("next");
        socket.get( socket.id,function(error,form_socket){
            //I will handle the error ty Tim
            console.log("form getted"+error);
             console.log(form_socket);
            socket.emit('next', form_socket.next());
        });

    });
});


});

@Tim Brown:在我的情况下,socket.set单独工作是因为它传递了一个引用,所以我最终处理同样的问题。

我的解决方法是在将表单对象传递给socket.set之前复制该表单对象。 但正如我所说的那样,我甚至不满足于它的工作。 也许这是最好的方式告诉我你在评论中的想法。