我最近开始使用javascript编写一个小型网页游戏。最近,我开始重构代码,使用node.js和socket.io来制作游戏多人游戏。
我的问题,我无法找到解决方案,是我想将客户端套接字变量传递给多个客户端javascript文件。
在client / app.js中:
var app = (function() {
...
var socket = io.connect('http://localhost:8080');
socket.on('connect', function() {
dice.setSocket(socket);
});
...
})();
在client / dice.js中:
var dice = (function() {
...
var gameSocket;
if (gameSocket) {
gameSocket.on('dice rolling', function(data) {
playDiceAnim(data);
});
}
function setSocket(socket) {
gameSocket = socket;
}
})();
不幸的是,当骰子滚动时#39;事件从服务器端发出,playDiceAnim(data)永远不会执行。但是,我知道骰子滚动' app.js收到了一个事件。例如,如果在app.js中我放了:
var app = (function() {
...
var socket = io.connect('http://localhost:8080');
socket.on('dice rolling', function() {
console.log('event received');
});
...
})();
然后,开发人员工具控制台中的结果是:
'event received'
我可以在网上找到的示例将所有客户端javascript放入.html文件或单个.js文件中的脚本标记中。但是,我希望比这更模块化。
如何正确地将客户端套接字传递给其他客户端文件?
Here is the full code。谨防错误,它正在被重构。此外,任何一边的建议都会非常感激,因为我对javascript和node.js仍然相当新。
答案 0 :(得分:0)
以下是我的建议:
首先加载应用程序脚本,让它通过以下方法使其他调用者可以使用该套接字:
var app = (function() {
...
var socket = io.connect('http://localhost:8080');
return {
getSocket: function() { return socket;}
}
...
})();
var dice = (function() {
...
var gameSocket = app.getSocket();
if (gameSocket) {
gameSocket.on('dice rolling', function(data) {
playDiceAnim(data);
});
}
})();
在这种情况下,我认为app
更有意义的是成为服务提供者,例如连接的webSocket,以及其他模块从应用程序请求该信息。但是,它实际上取决于您希望哪个模块更通用而不依赖于另一个模块。它可以采取任何一种方式。