我正在玩 node.js 和 socket.io,试图让计数程序正常工作。基本上它应该是每次连接的客户端按下按钮时将共享计数器增加 1,并将该数字显示给所有连接的客户端。
我得到的是每个客户都有一个单独的计数器。例如,如果我在一个客户端上数到 10,然后开始从另一个客户端开始数,它从 1 开始。如果我回去,第一个客户端将从 10 恢复。我已经尽力解决这个问题,但是当涉及到 JS 范围问题(我怀疑这是)或套接字时,我不太了解。
var socketio = require('socket.io');
var io;
var count = 1;
exports.listen = function(server){
io = socketio.listen(server);
io.set('log level', 1);
io.sockets.on('connection', function (socket){
joinRoom(socket, 'Lobby');
count = handleCounter(socket, count);
});
};
function handleCounter(socket, count){
socket.on('endCount', function(){
io.sockets.emit('endCount', {
success: true,
num: count
});
count++;
console.log(count);
});
return count;
}
function joinRoom(socket, room){
socket.join(room);
}
作为一个注释,我之前只是将handleCounter中的代码放入io.sockets.on('connection')
函数中时它工作过,但我想知道为什么当我尝试像上面的代码一样将它放在外面时它不会工作。
非常感谢任何帮助,谢谢。