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

时间:2016-07-31 13:08:05

标签: 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;
    }
})();

不幸的是,当骰子滚动时#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仍然相当新。

1 个答案:

答案 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,以及其他模块从应用程序请求该信息。但是,它实际上取决于您希望哪个模块更通用而不依赖于另一个模块。它可以采取任何一种方式。