2012-06-20 150 views
4

假设我在生产服务器上有一个nodejs/express应用程序。如果我想添加一个新的路由器,我必须重新启动一个,对吧?但是,如果我重新启动我的node.js服务器,则用户可能会遇到错误。重新启动node.js生产服务器

那么我应该如何重新启动我的node.js服务器,而不会为我的用户出错呢?

回答

9

如果您使用Nginx代理Node.js应用程序,则可以告诉Node应用程序在套接字上侦听,然后只有在新服务器正确启动时才关闭旧服务器;一旦旧的服务器关闭,Nginx会将请求路由到服务器的新实例。这就是流行的Ruby服务器Unicorn的工作原理。

在Nginx的,你会指定你的上游是这样的:

upstream node_server { 
    server unix:/path/to/socket.sock; 
} 

server { 
    ... 
    location/{ 
    ... 
    proxy_pass http://node_server; 
    } 
} 

而且在节点,您可以在插座上听与

server.listen('/path/to/socket.sock', function() { 
    console.log("Listening on socket."); 
}); 
0

我想,答案是先测试一个临时服务器中的所有东西(例如,您计划部署的代码的确切副本,紧挨着现有生产代码)并选择低流量时间,然后切换目录转到新的一个。

如果出现问题,请将其切回。

但实际的“停机时间”只有一秒钟,除非有人的请求目前正在服务,他们不会得到一个错误。

这就是说,我从来没有尝试过这个,我很想知道最好的答案是什么! 好问题!

+0

我认为这是一个正确的答案,这就是如何最人们实际上在做。不过,我相信独角兽精神是获得非停机时间重启的重大举措。 “独角兽之路”之后,“Brandon Tilley”的回答与答案一样好。 – nembleton