NodeJS EventEmitter

时间:2015-03-29 17:50:46

标签: php node.js sockets express 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");
    });

1 个答案:

答案 0 :(得分:1)

我认为问题在于您有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,以便共享。

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