[英]Storing data for global access without global variable
我正在制作一个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
?
您需要使用闭包,以便将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;
查看像Redis.io这样的数据存储解决方案。 它们是为这类瞬态事件而设计的,以帮助您避免因全局变量而使代码混乱,同时使其性能不至于明显降低速度。
使用redis,您只需调用一个函数即可以新值更新redis中的键。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.