2012-01-05 22 views
2

我希望能夠無需停機碼更新後殺掉我的老工藝。我可以讓HTTP服務器在共享套接字上偵聽,以允許不停機代碼升級?

在Ruby中,我用獨角獸做到這一點。當您發送Unicorn主進程USR1終止信號時,它會生成一個新的副本,這意味着所有庫都會從文件中再次加載。有一個回調可用,當一個獨角獸的主人已經加載其庫和其工作進程已準備好處理請求;然後你可以把代碼放在這裏,通過它的PID來殺死老主人。然後老主人將系統地關閉其工作進程,等待他們結束任何當前的請求。這意味着您可以部署代碼更新而不丟失單個請求,停機時間爲0。

是否有可能做到這一點的節點?似乎有很多庫隱約做這樣的事情的 - 框架,似乎只是做的過程中盲目重啓崩潰後,和類似的東西 - 但我無法找到任何東西,這是一個精簡的實現這種基本模式。如果可能的話,我想自己做,它不會那麼難 - 我只需要能夠做到http.createServer()聽(),並指定一個套接字文件(我將nginx的配置來。發送請求到),而不是一個端口。

回答

2

nethttp模塊的版本都爲listen,這些版本獲取到套接字的路徑並在服務器綁定後觸發回調。

此外,還可以使用新的child_process.fork推出一個新的節點處理。這個新進程有一個內置於其父進程的通信通道,因此可以很容易地告訴其父進程初始化後退出。

(對於前兩個環節,看不到鏈接到的方法,因爲它們都是相同的方法名。)

+0

謝謝!是的,我已經實現了與master交流的工作進程(使用集羣模塊),但還沒有找到代碼重新加載。這是我心中的一個真實的負擔;我知道node.js目前專注於跨平臺,但遺憾的是沒有更多的關注它將如何輕鬆地使用共享套接字的美妙。 – Cera 2012-01-05 04:39:32

相關問題