2012-07-05 146 views
1

我一直在尋找一種乾淨的方式來實現我正在開發的服務器的關閉邏輯。如何實現服務器關閉

有,我可以採取兩種辦法:

  • 使用Runtime.addShutdownHook()來妥善地處理髮出按Ctrl-C時關閉。
  • 收聽指定的關閉端口(類似於Tomcat的操作)並在通過該端口收到相應命令時關閉。

第一種方法很容易實現,但使用Ctrl-C作爲關閉機制似乎並不優雅。 第二種方法看起來更清晰,但需要配置和監聽另一個端口的開銷。

我會很感激這方面的建議,特別是如果你可以建議一個更好的選擇。

+0

定義通過* existing *端口接收的關閉命令有什麼問題? – EJP 2012-07-05 19:12:39

回答

2

我不知道你有一個選擇;)

取決於如何與您的服務器上運行,什麼樣的,你使用的資源,你將需要實現關閉掛鉤爲奇數情況下有人實際上去和ctrl + C的整個事情(不管它是否在用戶手冊或不)

另一方面,對於常規的使用,有一種方法來推動關機命令似乎是最好的方式去。不過,您可能不需要專用的端口或命令集;您可能可以將其納入您的正常現有界面。

+0

我會爲@Miquel寫什麼。您總是希望發送某種類型的關機命令以進行正常操作,並且另一種方式可以發生意外情況,例如如果通常的接口不可達。 – jayeff 2012-07-05 15:54:32

3

大概你的應用程序已經接收到命令了吧?我的意思是,它必須以某種方式輸入!爲什麼不只是添加一個額外的關機命令?

顯然你需要一些圍繞發出命令的安全性,但是如果你已經有了執行關閉的代碼(不管你會放在鉤子裏),你可以放在命令中。