在 KrakenJS/Express 中加载 socket.io 作为模块

Posted

技术标签:

【中文标题】在 KrakenJS/Express 中加载 socket.io 作为模块【英文标题】:Loading socket.io as a module in KrakenJS/Express 【发布时间】:2014-04-02 23:05:57 【问题描述】:

我正在尝试将我的应用程序中的 socket.io 代码分离到它自己的文件中,就像这个线程中的答案一样:Separating file server and socket.io logic in node.js

但是,socket.io 代码永远不会运行,也不会开始监听,我真的不明白为什么:

//index.js
kraken.create(app).listen(function (err, server) 
        if (err) 
            console.error(err);
        
        var io = require('./lib/socket').listen(server);
    );

//socket.js
var socketio = require('socket.io')

module.exports.listen = function(app) 
    return function (req, res) 
        io = socketio.listen(app);

        io.sockets.on('connection', function (socket) 

            socket.on('disconnect', function () 
                if (socket.uid !== undefined) 
                    // do some stuff
                
            );
        );

        return io;
    
;

我最好的猜测是 req 和 res 对象不存在,因为它不是请求?问题是我真的需要使用 req 对象,因为我需要在连接期间访问会话。如果这是问题,如何实现?

提前感谢您的明智建议和更好的智慧。

编辑:我查看了https://github.com/jfromaniello/passport.socketio,这正是我所需要的,但是我不知道我的会话密钥或秘密是什么。凭护照怎么知道?

【问题讨论】:

【参考方案1】:

您的监听函数只是返回另一个函数,并没有真正触发代码来设置 socketio 进行监听。

试试:

module.exports.listen = function(app) 
    io = socketio.listen(app);

    io.sockets.on('connection', function (socket) 

        socket.on('disconnect', function () 
            if (socket.uid !== undefined) 
                // do some stuff
            
        );
    );

    return io;
;

这是另一个例子: https://github.com/paypal/kraken-js/issues/39

【讨论】:

是的,我知道,我将它从 return 语句中删除,它起作用了。但是,我想将套接字与登录用户相关联,这现在是不可能的,因为 socket.io 的东西无权访问会话?这是我的主要问题,套接字的东西按预期工作。 :) 好的,你原来的问题不是很清楚。查看您发布的有关护照的链接,他们有一个示例,并进一步详细说明了如何设置密钥和秘密。或查看此相关帖子:***.com/questions/13095418/… 对不起。我查看了示例,但我仍然很难将其翻译为 krakenjs。我应该要求 express 然后启动会话吗?我也很难理解为什么我需要快速会话,护照不是在它自己的会话上运行吗? 我认为您此时提出了不同的问题。我对护照或 krakenjs 知之甚少,无法回答。似乎护照正在打开自己的会话,然后您可以将经过身份验证的用户注入 res 结构。这是一个用护照覆盖海妖的教程,也许它可以提供帮助。我会专注于让事情变得简单,并在一条领带上添加一项技术。 忘记将 krakenJS 的实际教程与 Passport 链接:github.com/lmarkus/Kraken_Example_Passport

以上是关于在 KrakenJS/Express 中加载 socket.io 作为模块的主要内容,如果未能解决你的问题,请参考以下文章

如何在 tensorflow 服务 (gpu) 中加载自定义动态库 (*.so)?

无法在 play-games-plugin-for-unity 中加载库 libgpg.so

在 Code::Blocks 中加载库时出错

Java,在classpath中加载本机库

在 UIViewController 中加载和卸载数据

在 Django 中加载 CSS/图像