javascript - 在多个客户端 JavaScript 文件之间传递套接字

标签 javascript node.js socket.io

我最近开始用 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/

相关文章:

javascript - Google API - 未找到文件 ID - 但返回的数据对应于我输入的folderId

javascript - NPM 从 package.json 安装依赖

javascript - 我想根据 URL 创建多个命名空间,但我对 socket.io 感到困惑

javascript - 开始使用 Qooxdoo

javascript - jquery 自动完成组合框错误 : Uncaught TypeError: Object [object Object] has no method 'button'

javascript - 避免同一链接出现多个新选项卡

node.js - Socket.io 不适用于 https(让我们加密)

javascript - Javascript中匹配正则表达式字符串

node.js - Node.js 中同一主机的并发连接限制

javascript - 使用 $.get 调用文件时 socket.io 事件不起作用