NodeJS 事件发射器

NodeJS EventEmitter

我正在使用模块化设置,其中 Socket.IO 不是我的应用程序或路由的一部分 - 但在外部模块中。

我有一个 PHP 脚本可以接收数据然后更新数据库。 我已将其设置为向节点应用程序发送 cURL 请求,我希望路由触发我的套接字模块侦听的事件并发出 socket.io 事件,并更新客户端的内容实时查看。

事件是发送到整个应用程序还是我的方法全错了?

谢谢。

Express 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");
    });

我认为问题在于您有 2 个独立的事件发射器。在这两个模块中,您都在创建 EventEmitter 的实例。有什么特别的原因你不能只使用 '/php-script-calls-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 以便共享。

我的共享事件-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");
    });
}