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");
});
}
我正在使用模块化设置,其中 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");
});
}