我正在制作node.js游戏服务器,我正在使用socket.io来获取webscockets和房间。 然而,这主要是一个纯JavaScript问题:
我正在为每2个玩家创建一个随机数的房间,它的工作原理如下:
var openRoom = Math.floor(Math.random() * 90000) + 10000;
io.sockets.on('connection', function (socket) {
socket.on('addPlayer', function(username) {
if (io.sockets.clients(openRoom).length <= 2) {
socket.join(openRoom);
} else {
openRoom = Math.floor(Math.random() * 90000) + 10000;
socket.join(openRoom);
}
...
有没有办法不使用全局openRoom
?
答案 0 :(得分:3)
您需要使用闭包,以便openRoom
变量暴露给内部函数。
例如:
(function() {
var openRoom = Math.floor(Math.random() * 90000) + 10000;
io.sockets.on('connection', function (socket) {
socket.on('addPlayer', function(username) {
if (io.sockets.clients(openRoom).length <= 2) {
socket.join(openRoom);
} else {
openRoom = Math.floor(Math.random() * 90000) + 10000;
socket.join(openRoom);
}
...
})();
您还可以创建一个全局对象,用于存储任何全局变量:
if (typeof window['MyApp'] == 'undefined') {
MyApp = {
someVar: someValue
};
}
这可以让你以后获取/设置它:
var x = MyApp.someVar;
答案 1 :(得分:0)
查看Redis.io等数据存储解决方案。它们专为这些瞬态事物而设计,可以帮助您不会使用全局变量使代码混乱,同时具有足够的性能,不会明显减慢速度。
使用redis,您只需调用一个函数,该函数使用新值更新redis中的键。