如何使用来自不同模块的 Socket.io 在 MEAN 堆栈应用程序中发送通知?

How to send notifications in MEAN stack app using Socket.io from different modules?

我有一个使用 MEAN 堆栈编写的应用程序。我在应用程序中有不同的模块,如 'Users'、'Messages'、'Sections' 等...

客户端不应该向服务器发送任何通知,只有服务器向房间中的客户端发送消息。

如何配置 socket.io 以用于不同的模块:

如下:

users.js

exports.Users = function(io) {

  ...
  UsersCollection.save(...) {
    ...
    io.join('some room');
    ...
  }
}

messages.js

exports.Messages = function(io) {

  ...
  MessagesCollection.save(...) {
    ...
    io.to('some room').emit('new_message', msg):
    ...
  }
}

sections.js

exports.Sections = function(io) {

  ...
  SectionsCollection.update(...) {
    ...
    io.to('some room').emit('section_updated', msg):
    ...
  }
}

server.js

var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
var users = require('users')(io);
var messages = require('messages')(io);
var sections = require('sections')(io);
...

io.on('connection', function (socket) {
  console.log('someone connected')
});

制作这种东西的最佳方法是什么?

谢谢。

我通过以下方式使用 EventEmitter 找到了解决方案:

server.js

var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
**var events = require('events');
var serverEmitter = new events.EventEmitter();
var users = require('users')(serverEmitter);
var messages = require('messages')(serverEmitter);
var sections = require('sections')(serverEmitter);**
...

io.on('connection', function (socket) {
  serverEmitter.on('new_message', function (data) {
        socket.to('some room').emit('new_message', msg):
    });
});

后来在 api 中我将发射器用作:

serverEmitter.emit('new_message', msg);

谢谢。