NodeJS、websocket 和 module.export

NodeJS, websocket, and module.export

我有一个 server.js 文件。

在里面,我定义了我的路线。

// routes
var mainRoutes   = require('./routes/main.js')(app, express);
var apiRoutes    = require('./routes/api.js')(app, express);
var socketRoutes = require('./routes/socket.js');

app.use('/', mainRoutes);
app.use('/api', apiRoutes);

// socket.io communication
io.sockets.on('connection', socketRoutes);

我的 socket.js 文件看起来像这样:

module.exports = function (socket) {

    console.log('user connected');

    socket.on('myEvent', function(data) {
        // whatever ...
    });
}

在这个函数中,我可以捕获事件并发送一些。 但是我需要在某个时候向所有人发送消息。假设我收到 'myEvent' 事件。

基本上,我想做的是:

io.sockets.emit('messageForEveryone', "This is a test");

但是在这里,我只能处理 'socket' 的论点,我猜这只适用于 1 个人。

我想将 io 从 server.js 传递到 socket.js。

我试过了(在 server.js 中):

var socketRoutes = require('./routes/socket.js', io);

那(在 socket.js 中):

module.exports = function (io, socket)

显然,它不起作用。我什至不明白套接字参数是从哪里来的。

问题:当我在 sockets.js 文件的 module.export 中时,如何处理 io 对象?

非常感谢任何帮助,我是新手。

谢谢!

因为您只想发送给所有客户端,而不是将 io 传递给 socketRoutes,您可以简单地这样做。

module.exports = function (socket) {
    var sockets = this;
    console.log('user connected');

    socket.on('myEvent', function(data) {
        sockets.emit('hello_all_clients',data);
    });
}

您可以 return 导出函数。

module.exports = function (io) { // pass io to initialize
      return function (socket) {
         // io and socket are both scoped
       }
}

然后在 server.js

// socket.io communication
io.sockets.on('connection', socketRoutes(io));