我使用模块化设置,其中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 :(得分: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");
});
}