【问题标题】:architecture for modular socket.io in node.jsnode.js 中模块化 socket.io 的架构
【发布时间】:2014-09-19 12:23:22
【问题描述】:

在 node.js 应用程序中,假设我有一个像这样的 app.js

var express = require('express')
var app = express();

var server = http.createServer(app);

...

module.exports = {
  app:app,
  server:server
}

另外,还有/lib/sockets.js,socket.io的所有逻辑都应该进去。看起来像这样:

var server = require('../app.js').server;
var io = require("socket.io").listen(server);

io.sockets.on('connection', function(socket) {
  socket.on('event', function(msg) {
    socket.emit('news', msg});
  });
});

module.exports = io;

在这里要求 app.js 中的server 是一种好习惯吗?如果没有,有什么更好的解决方案?谢谢

【问题讨论】:

    标签: javascript node.js module socket.io npm


    【解决方案1】:

    尝试让您的 sockets.js 文件导出一个函数。然后需要 app.js 中的套接字文件并传入任何相关参数。

    在你的 lib/sockets.js 中:

    module.exports = function(server){
    
        var io = require("socket.io").listen(server);
    
        io.sockets.on('connection', function(socket) {
            socket.on('event', function(msg) {
                socket.emit('news', msg);
            });
        });
    
        return io;
    };
    

    在你的 app.js 中

    var express = require("express");
    var app = express();
    
    var io = require("./lib/sockets")(app);
    

    【讨论】:

    • 这行得通。太好了,谢谢!现在,如果我想在第三个模块中调用“发射”怎么办?我可以从这里以某种方式导出 io 对象以在另一个模块中使用它吗?
    • 您将遵循与第三个模块相同的模式。它会导出一个以 io 对象为参数的函数。然后在您的套接字文件中,您将需要在第三个模块中并将 io 对象作为参数传递给新的必需函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 2016-04-26
    • 2011-04-23
    • 1970-01-01
    • 2012-05-22
    • 2014-10-27
    • 1970-01-01
    相关资源
    最近更新 更多