2

如何在 Mean.io 堆栈中使用 socket.io?

首先,Mean.io 会定期更改它们的文件夹结构。所以我的问题是哪里是配置 socket.io 的最佳位置?还是使用 express.io 更好?

其次,我仍然不太确定在哪里可以找到告诉 mean.io 侦听端口的代码,我发现在 all.js 文件的 config 文件夹中定义了一个端口,但真正的问题是一旦我定义了服务器.listen(port) 应用程序未加载。如果我不加载应用程序但 socket.io 不起作用。

我还有另一个关于 /socket.io/socket-io.js 文件的问题?我已将其复制到索引文件夹中,但我的应用找不到它或显示 404 错误。据我了解,我知道这不是位于任何此类位置的实际文件,人们也建议将该行作为 127.0.0.1/socket.io/socket-io.js 但没有一个使 js 文件可用于应用程序能够运行socket.io。

在 mean.io 框架中定义 socket.io 的正确方法是什么?

4

2 回答 2

3

我也遇到了同样的问题,我花了大约一周的时间才终于把它弄好。我将尝试解释我做了什么:

应用程序.js

在这个文件中,我只调用为我创建和设置 socket.io 对象的代码,然后将其传递给 routes 模块。

'use strict';

/*
 * Defining the Package
 */
var Module = require('meanio').Module;

var MeanSocket = new Module('chat');

/*
 * All MEAN packages require registration
 * Dependency injection is used to define required modules
 */
MeanSocket.register(function(app, http) {

    var io = require('./server/config/socketio')(http);

    //We enable routing. By default the Package Object is passed to the routes
    MeanSocket.routes(io);

    return MeanSocket;
});

服务器/配置/socketio.js

这个文件只是简单地配置了 socket.io 对象。请注意,我必须将 meanio 模块升级到版本 0.5.26 才能完成这项工作,因为http对象(快速服务器)在较旧的 meanio 版本中不可用。此外,如果你想使用 ssl,你可以注入https而不是http

'use strict';

var config = require('meanio').loadConfig(),
    cookie = require('cookie'),
    cookieParser = require('cookie-parser'),
    socketio = require('socket.io');

module.exports = function(http) {

    var io = socketio.listen(http);

    io.use(function(socket, next) {
        var data = socket.request;

        if (!data.headers.cookie) {
            return next(new Error('No cookie transmitted.'));
        }

        var parsedCookie = cookie.parse(data.headers.cookie);
        var sessionID = parsedCookie[config.sessionName];
        var parsedSessionID = cookieParser.signedCookie(parsedCookie[config.sessionName], config.sessionSecret);

        if (sessionID === parsedSessionID) {
            return next(new Error('Cookie is invalid.'));
        }

        next();
    });

    return io;
};

路线/chat.js

最后,使用路由文件定义套接字事件等。

'use strict';

// The Package is passed automatically as first parameter
module.exports = function(MeanSocket, io) {

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

        console.log('Client Connected');

        socket.on('authenticate', function(data, callback) {

        });
    });
};

希望这可以帮助!

于 2014-09-12T05:26:33.477 回答
1

最简单的方法是安装套接字包......

mean install socket
于 2015-01-04T13:41:50.420 回答