我使用的是模块化设置,其中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");
});发布于 2015-03-29 18:07:52
我认为问题是,你有两个单独的事件发射器。在这两个模块中,您都要创建一个EventEmitter实例。有什么特别的原因不能仅仅使用‘/php-脚本-调用-这个’路由的套接字并从那里发出?
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-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");
});
}https://stackoverflow.com/questions/29332645
复制相似问题