javascriptnode.jssocketcluster

How do I get SocketCluster to restart on file change?


I'm running http://socketcluster.io/ and I want to restart my workers whewnever a file changes. However, nodemon server.js fails as soon as it tries to restart with an endlessly-repeating wall of:

1445633138359 - Origin: Worker (PID 44372)
    [Error] Error: connect ECONNREFUSED /var/folders/fj/yzfd3_tn7xd0smz7j6s093mh0000gn/T/socketcluster/6879fe94-ed92-4188-b1d7-cb187a5ade4e_b68fcded6c/b0
    at Object.exports._errnoException (util.js:874:11)
    at exports._exceptionWithHostPort (util.js:897:20)
    at PipeConnectWrap.afterConnect [as oncomplete] (net.js:1063:14)
1445633138362 - Worker 0 exited - Exit code: 0

How can I safely restart SocketCluster to load the new changes?


Solution

  • nodemon sends the SIGUSR2 signal to the main (Master) process. SocketCluster (correctly) interprets this as as a request to reboot the workers. Unfortunately, there's an open issue where things are not shut down properly and errors fly all around.

    There are two options:

    You can add the code from the linked issue:

    house.addShutdownHandler(function(ctx, next){
        socketCluster.killWorkers();
        socketCluster.killBrokers();
        next();
    });
    

    or use forever to send a "restart everything" signal:

    forever -w --killSignal=SIGTERM server.js