如何使用来自不同模块的 Socket.io 在 MEAN 堆栈应用程序中发送通知?
How to send notifications in MEAN stack app using Socket.io from different modules?
我有一个使用 MEAN 堆栈编写的应用程序。我在应用程序中有不同的模块,如 'Users'、'Messages'、'Sections' 等...
客户端不应该向服务器发送任何通知,只有服务器向房间中的客户端发送消息。
如何配置 socket.io 以用于不同的模块:
- 所以当用户在用户模块中登录时,将其添加到房间
- 当用户 post 一条消息,并且在消息插入到 mongodb 后发出消息(来自消息模块)
- 当用户更新一个部分,并且在 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')
});
制作这种东西的最佳方法是什么?
谢谢。
我通过以下方式使用 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);
谢谢。
我有一个使用 MEAN 堆栈编写的应用程序。我在应用程序中有不同的模块,如 'Users'、'Messages'、'Sections' 等...
客户端不应该向服务器发送任何通知,只有服务器向房间中的客户端发送消息。
如何配置 socket.io 以用于不同的模块:
- 所以当用户在用户模块中登录时,将其添加到房间
- 当用户 post 一条消息,并且在消息插入到 mongodb 后发出消息(来自消息模块)
- 当用户更新一个部分,并且在 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')
});
制作这种东西的最佳方法是什么?
谢谢。
我通过以下方式使用 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);
谢谢。