我寫了一個Java程序,它爲一個簡單的在線遊戲創建一個套接字連接。該服務器是多客戶端,並具有記錄的用戶列表。當我關閉客戶端時,它會向服務器發送消息以註銷用戶。我還希望當客戶端通過Eclipse的「終止」按鈕(或者使用Windows任務管理器)終止時,客戶端會發送相同的消息。我嘗試了ShootdownHook,但它不起作用。任何想法? 謝謝。如何對進程終止執行操作?
1
A
回答
1
爲了有一個強大的系統,你會在某個時刻需要實現心跳機制,允許服務器關閉連接。例如,如果客戶端在最近30秒內沒有設置心跳,請關閉連接。考慮客戶端和服務器之間的網絡故障或客戶端運行的計算機死亡的情況。在這些情況下,您不能依賴客戶端的註銷消息進入服務器。
話雖如此,我懷疑shutdown hook已經太遲而無法做到實際的網絡IO。我已成功使用關機鉤關閉連接。因此,在其他關閉活動(特別是關閉連接)啓動之前,您需要更正式地關閉消息。
+0
謝謝。正如你所說,我應該檢查客戶完成的任何其他操作,而不僅僅是註銷。我要去做心跳機制。 – Simon 2011-05-15 18:18:43
0
在Eclipse中,您無法在客戶端執行任何操作。它以極端的偏見終止了jvm' - 沒有代碼運行。沒有鉤子,沒有任何東西。
就像@Dilum解釋的那樣,您可以在服務器端應對。
相關問題
- 1. 如何阻止iOS在執行關鍵操作時終止應用程序?
- 2. 執行腳本後終止PowerShell進程
- 3. Python的線程 - 阻塞操作 - 終止執行
- 4. 在執行Nunit測試期間進程終止執行
- 5. 父進程在C#中終止時如何終止子進程
- 6. Windows如何終止進程?
- 7. python執行子進程而不等待子進程終止
- 8. 如何對進度條進行操作
- 9. 如何防止Visual Studio在執行測試後終止任何進程
- 10. 如何在Unity3d中運行進程時執行某些操作
- 11. 如何在不終止執行此操作的線程的情況下取消文件上載/下載操作?
- 12. GDB如何停止執行其他進程? GDB如何工作?
- 13. 如何對JOptionPane.showMessageDialog的OK執行操作
- 14. 如何對post_save執行操作?
- 15. 如果進程終止,執行整個確保塊可以嗎?
- 16. 終止jquery的進一步執行
- 17. 如何檢查Linux進程以確定進程何時/何時終止/終止?
- 18. 如何退出/暫停/終止/終止/停止MSBuild進程?
- 19. 並行執行和終止多線程
- 20. 執行程序線程不終止
- 21. 如何查看我的Java進程正在執行的操作?
- 22. 如何在python子進程完成後執行post操作
- 23. 操作系統如何知道進程的執行時間
- 24. 終極版過渡到操作執行
- 25. 對象未完成,終結器線程無法執行任何操作
- 26. 如何終止當前類的執行?
- 27. 如何執行此操作?
- 28. 對JQuery選擇進行分組並對它們執行操作?
- 29. 對$ .post()執行JavaScript操作()
- 30. 如何避免父進程終止在Python中的進程終止
ShootDownHook似乎是正確的方式:看看這裏:http://stackoverflow.com/questions/2541597/how-to-gracefully-handle-the-sigkill-signal-in-java – Heisenbug 2011-05-15 01:55:17