【问题标题】:Socket.IO Scoping Issue (Node.JS)Socket.IO 范围问题 (Node.JS)
【发布时间】:2011-08-11 13:22:52
【问题描述】:

我正在开发一个我正在利用 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');
});

如您所见,我基本上是在设置初始连接,通过管理类加入会话(所以我知道为哪个会话发送谁)然后我试图动态引入一些自定义的东西,这些东西也是将通过套接字连接发出和监听。

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

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

【问题讨论】:

  • 我昨天也遇到了同样的问题。我目前正在使用的解决方案是让我的自定义模块发出事件,然后让 socket.io 监听任何此类事件。但我不确定这是否是最好的方法:\

标签: javascript node.js scope socket.io


【解决方案1】:

像这样创建你的模块,你可以将client 传递到模块中

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

    });

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

    });
};

然后像这样做要求

require('someModuleIBuild')(client);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2013-03-10
    • 1970-01-01
    • 2016-08-28
    • 2013-01-29
    • 1970-01-01
    • 2012-12-08
    相关资源
    最近更新 更多