2011-05-15 13 views
1

我寫了一個Java程序,它爲一個簡單的在線遊戲創建一個套接字連接。該服務器是多客戶端,並具有記錄的用戶列表。當我關閉客戶端時,它會向服務器發送消息以註銷用戶。我還希望當客戶端通過Eclipse的「終止」按鈕(或者使用Windows任務管理器)終止時,客戶端會發送相同的消息。我嘗試了ShootdownHook,但它不起作用。任何想法? 謝謝。如何對進程終止執行操作?

+0

ShootDownHook似乎是正確的方式:看看這裏:http://stackoverflow.com/questions/2541597/how-to-gracefully-handle-the-sigkill-signal-in-java – Heisenbug 2011-05-15 01:55:17

回答

1

爲了有一個強大的系統,你會在某個時刻需要實現心跳機制,允許服務器關閉連接。例如,如果客戶端在最近30秒內沒有設置心跳,請關閉連接。考慮客戶端和服務器之間的網絡故障或客戶端運行的計算機死亡的情況。在這些情況下,您不能依賴客戶端的註銷消息進入服務器。

話雖如此,我懷疑shutdown hook已經太遲而無法做到實際的網絡IO。我已成功使用關機鉤關閉連接。因此,在其他關閉活動(特別是關閉連接)啓動之前,您需要更正式地關閉消息。

+0

謝謝。正如你所說,我應該檢查客戶完成的任何其他操作,而不僅僅是註銷。我要去做心跳機制。 – Simon 2011-05-15 18:18:43

0

在Eclipse中,您無法在客戶端執行任何操作。它以極端的偏見終止了jvm' - 沒有代碼運行。沒有鉤子,沒有任何東西。

就像@Dilum解釋的那樣,您可以在服務器端應對。

相關問題