Question

I'm developing a server with Node JS where I create multiple childs that open a html with chrome.

app.post('/exeVideo', function(req,res) {
    child = child_process.spawn('chromium-browser', ['RaspMediaVideos.html']);    
    child.on('exit', function() {            
        res.writeHead(200,"0K",{'Content-Type': 'text/plain'});
        res.end(); 
    });
});

This Html has a socket.io communication with the server:

io.on("connection", function ( socket ){

    app.post('/playVideo', function(req,res) {
        socket.emit("playvideo");
        res.writeHead(200,"0K",{'Content-Type': 'text/plain'});
        res.end();          
    });

    app.post('/pauseVideo', function(req,res) {
        socket.emit("pausevideo");
        res.writeHead(200,"0K",{'Content-Type': 'text/plain'});
        res.end();      
    });

My problem here is that if I create 2 childs_process with the code showed above, both chrome windows executes well but only the first one is taking the socket.io events (works good). The second one don't respond to any event :S How can I make it to make ALL childs capture the socket.io events?

Here's the script of html handling events:

var socket = io.connect('http://localhost:3434');

socket.on("pausevideo", function() {
    player.pause();
});

socket.on("playvideo", function() {
    player.play();
});

Thanks for your time.

Was it helpful?

Solution

You're calling socket.emit in those functions which will only send to the calling socket. Try something like this instead.

app.post('/playVideo', function(req,res) {
    io.sockets.emit("playvideo");
    res.writeHead(200,"0K",{'Content-Type': 'text/plain'});
    res.end();          
});

app.post('/pauseVideo', function(req,res) {
    io.sockets.emit("pausevideo");
    res.writeHead(200,"0K",{'Content-Type': 'text/plain'});
    res.end();      
});


io.on("connection", function (socket) {
    // Handle Events
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top