node.js と socket.io をいじって、カウント プログラムを動作させようとしています。基本的には、接続されたクライアントがボタンを押すたびに共有カウンターを 1 増やし、その数を接続されているすべてのクライアントに表示する必要があります。
私が得ているのは、各クライアントが何らかの形で個別のカウンターを持っているということです。たとえば、あるクライアントで 10 まで数えた後、別のクライアントでカウントを開始すると、最初のクライアントは 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')
関数に配置しただけで機能していましたが、上記のコードのように外部に配置しようとすると機能しない理由を知りたいです。
どんな助けでも本当に感謝しています、ありがとう。