我最近开始用 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;
}
})();
不幸的是,当从服务器端发出“骰子滚动”事件时,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 还很陌生。
最佳答案
这是我的建议:
首先加载应用程序脚本并让它通过方法使套接字可供其他调用者使用:
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);
});
}
})();
在这种情况下,我认为应用程序作为连接的 webSocket 等服务的提供者以及其他模块从应用程序请求该信息更有意义。但是,这实际上取决于您想要哪个模块更通用而不依赖于另一个模块。两种情况都可能发生。
关于javascript - 在多个客户端 JavaScript 文件之间传递套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38684291/