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

时间:2016-08-07 12:48:32

标签: socket.io mean-stack

我有一个使用MEAN堆栈编写的应用程序。我在应用中有不同的模块,用户'用户'消息''部分'等...

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

如何配置要在不同模块中使用的socket.io:

  • 因此,当用户登录“用户”模块时,将其添加到房间
  • 当用户发布消息时,以及插入消息后插入mongodb消息(来自Messages模块)
  • 当用户更新某个部分,并在mongodb中更新该部分后,将更改发送给会议室中的用户。

如下所示:

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')
});

制作此类产品的最佳方式是什么?

感谢。

1 个答案:

答案 0 :(得分:1)

我通过以下方式使用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):
    });
});

后来在apis中我使用了发射器:

serverEmitter.emit('new_message', msg);

感谢。