Reputation: 1232
I'm using a modular setup where Socket.IO is no part of my application or routes - but in an external module.
I have a PHP script that receives data and then updates the database. I've set it up to send a cURL request to the node application, and I'd like the route to trigger an event that my socket module listens for to go and emit a socket.io event, and update what the client see's in real-time.
Does an event emit to the entire application or have I gone about my approach all wrong?
Thanks.
Express 3 Route
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);
});
Socket File (sub-module called in my io.js module)
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");
});
Upvotes: 0
Views: 1162
Reputation: 1412
I think the issue is that you have 2 separate event emitters. In both modules you're creating an instance of EventEmitter. Is there any particular reason you can't just use the socket from the '/php-script-calls-this' route and emit right from there?
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);
});
If you can't emit to the socket directly from the route, then create the EventEmitter in a module so it can be shared.
my-shared-event-emitter.js
var events = require('events');
module.exports = new events.EventEmitter();
Then in your route file:
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);
});
And finally the socket file:
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");
});
}
Upvotes: 1