我正在尝试构建一个处理像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},
}
答案 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之前复制该表单对象。 但正如我所说的那样,我甚至不满足于它的工作。 也许这是最好的方式告诉我你在评论中的想法。