javascript - Socket.IO 作用域问题 (Node.JS)

标签 javascript node.js scope socket.io

我正在开发一个在其中利用 Socket.IO 的 node.js 项目,但我无法解决范围界定问题。这是我正在尝试做的事情:

var io = require('socket.io').listen(80);
session_manager = require('./includes/session_manager');

// client joins the socket server
io.sockets.on('connection', function(client) {
    client.on('X.Session.join', function(session_id, client) {
        session_manager.joinSession(session_id, function(err, session) {
            // do whatever
        });
    });
    // BRING IN MORE LISTENERS/EMITTERS?
    require('someModuleIBuild');
});

如您所见,我基本上是在设置初始连接,通过管理类加入 session (这样我就知道为哪个 session 向谁发出消息),然后我尝试动态引入一些自定义内容,这些内容也是将通过套接字连接发射和监听。

那么我如何在我的自定义模块范围内引用这个当前连接呢?我看到的所有示例都在一个文件中包含所有“on”和“emit”功能,这似乎很快就会失控。

我可能想得太多/太复杂了(这是我的第一个 node.js 项目,第一个基于套接字的项目,第一个主要是 javascript 的项目......等)但任何帮助将不胜感激。

最佳答案

像这样创建你的模块,你可以将客户端传递给模块

module.exports = function(client) {
    client.on("whatever", function () {

    });

    client.on("whenever", function (data) {

    });
};

然后像这样做要求

require('someModuleIBuild')(client);

关于javascript - Socket.IO 作用域问题 (Node.JS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7026622/

相关文章:

javascript - 如何从 url 下载图像以在 Photoshop 脚本中使用(ExtendScript 工具包)

javascript - 同时使用 ng-show 和 ng-repeat

javascript - onsubmit 中断 Jade View

javascript - JS : Can I call a function with same scope as caller or do macro-like behavior

Python:未定义全局名称 'foobar'

perl - Perl 中的词法范围和动态范围有什么区别?

javascript - 如何保持父范围属性和隔离范围属性同步?

javascript - 现在有必要配置React.js环境(Webpack,Babel)吗?

css - 使用 Grunt 缩小时命名多个 css 文件

javascript - "break;"在异步函数中如何工作?