質問

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.

役に立ちましたか?

解決

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
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top