NodeJS EventEmitter

Я использую модульную настройку, где Socket.IO не является частью моего приложения или маршрутов, а является внешним модулем.

У меня есть скрипт PHP, который получает данные, а затем обновляет базу данных.
Я настроил его на отправку запроса cURL приложению узла, и я бы хотел, чтобы маршрут вызывал событие, которое прослушивается моим модулем сокета, и отправлял событие socket.io, а также обновлял то, что видит клиент. в режиме реального времени.

Излучает ли событие все приложение или я ошибся в своем подходе?

Благодарю.

Экспресс 3 Маршрут

var events              = require('events');
var event_emitter       = new events.EventEmitter();

router.post('/php-script-calls-this', function(req, res, next) {
event_emitter.emit('do-socket-event');
res.sendStatus(200);
});

Файл сокета (подмодуль вызывается в моем модуле io.js)

module.exports = function(io, socket) {

var events              = require('events');
var event_emitter       = new events.EventEmitter();

event_emitter.on("do-socket-event", function() {
socket.emit("update-client-data");
});

0

Решение

Я думаю, что проблема в том, что у вас есть 2 отдельных источника событий. В обоих модулях вы создаете экземпляр EventEmitter. Есть ли какая-то конкретная причина, по которой вы не можете просто использовать сокет из маршрута ‘/ php-script-call-this’ и отправлять его прямо оттуда?

var events              = require('events');
var event_emitter       = new events.EventEmitter();

router.post('/php-script-calls-this', function(req, res, next) {
socket.emit('update-client-date');
res.sendStatus(200);
});

Если вы не можете подключиться к сокету напрямую из маршрута, то создайте EventEmitter в модуле, чтобы он мог использоваться совместно.

мой-Shared-EVENT-emitter.js

var events = require('events');
module.exports = new events.EventEmitter();

Тогда в вашем файле маршрута:

var events              = require('events');
var event_emitter       = require('my-shared-event-emitter');

router.post('/php-script-calls-this', function(req, res, next) {
event_emitter.emit('do-socket-event');
res.sendStatus(200);
});

И, наконец, файл сокета:

module.exports = function(io, socket) {

var events              = require('events');
var event_emitter       = require('my-shared-event-emitter');

event_emitter.on("do-socket-event", function() {
socket.emit("update-client-data");
});
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]