간단한 온라인 게임을위한 소켓 연결을 만드는 Java로 프로그램을 작성했습니다. 서버가 다중 클라이언트이고 기록 된 사용자 목록이 있습니다. 클라이언트를 닫으면 사용자에게 로그 아웃하라는 메시지가 서버로 전송됩니다. 나는 또한 클라이언트가 Eclipse의 "종료"버튼 (또는 Windows 작업 관리자)으로 종료 될 때 클라이언트가 동일한 메시지를 전송하기를 원한다. 나는 ShootdownHook으로 시도했지만 작동하지 않는다. 어떤 생각? 감사합니다. .프로세스 종료시 작업을 수행하는 방법은 무엇입니까?
답변
견고한 시스템을 갖추려면 서버가 연결을 닫을 수 있도록 하트 비트 메커니즘을 구현해야합니다. 예를 들어, 클라이언트가 최근 30 초 동안 하트 비트를 설정하지 않은 경우, 연결을 닫으십시오. 클라이언트와 서버 간의 네트워크가 다운 된 경우 또는 클라이언트가 실행중인 시스템이 추악한 사망으로 사망 한 경우를 생각해보십시오. 이 경우 클라이언트의 로그 아웃 메시지를 서버에 전달할 수 없습니다.
그런데, 나는 셧다운 훅이 실제 네트워크 IO를하기에는 너무 늦었다 고 생각한다. 성공적으로 종료 후크를 사용하여 닫기 연결을 닫습니다. 따라서 다른 종료 작업 - 특히 연결 종료 -이 시작되기 전에 메시지가 전송되는 더 공식적인 종료가 필요할 것입니다.
감사합니다. 내가 말했듯이, 로그 아웃뿐만 아니라 클라이언트가 수행 한 다른 작업도 확인해야합니다. 나는 심장 박동 기작을 할 것입니다. – Simon
클라이언트 측에서 수행 할 수있는 작업으로 Eclipse에서 빨간색 사각형이 작동하지 않습니다. 그것은 극단적 인 편견으로 jvm을 끝내고 - 코드는 실행되지 않습니다. 후크도, 아무것도.
@Dilum에서 설명한대로 서버 측에서 대처할 수 있습니다.
- 1. Ruby에서이 작업을 수행하는 방법은 무엇입니까?
- 2. Cocos2d에서이 작업을 수행하는 방법은 무엇입니까?
- 3. Mysql이 작업을 수행하는 방법은 무엇입니까?
- 4. 프로세스 종료시 Android 위젯 초기화
- 5. 종료시 프로세스 종료
- 6. 프로세스 종료시 VBScript를 종료 하시겠습니까?
- 7. linq를 사용하여이 작업을 수행하는 방법은 무엇입니까?
- 8. 이 작업을 수행하는 LINQ의 유용한 방법은 무엇입니까
- 9. Scala에서 이와 같은 작업을 수행하는 방법은 무엇입니까?
- 10. jQuery를 사용하여 다음 작업을 수행하는 방법은 무엇입니까?
- 11. 로컬 어셈블리에서 XmlnsDefinition 작업을 수행하는 방법은 무엇입니까?
- 12. 이 작업을 수행하는 가장 효율적인 방법은 무엇입니까?
- 13. 자연 분류 작업을 수행하는 방법은 무엇입니까?
- 14. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까
- 15. C에서 루아 테이블 작업을 수행하는 방법은 무엇입니까?
- 16. Rails 3에서이 작업을 수행하는 방법은 무엇입니까?
- 17. 우분투에서 mail() 작업을 수행하는 방법은 무엇입니까?
- 18. xcode에서 텍스트 작업을 수행하는 방법은 무엇입니까?
- 19. python cgi를 사용하여 작업을 수행하는 방법은 무엇입니까?
- 20. struts2에서 백그라운드 작업을 수행하는 방법은 무엇입니까?
- 21. 버튼을 클릭하는 동안 작업을 수행하는 방법은 무엇입니까?
- 22. 프로세스 종료/종료시 공유 POSIX 객체 정리
- 23. Java에서 GUI 작업을 수행하는 방법
- 24. C#에서 프로세스 간 통신을 수행하는 가장 쉬운 방법은 무엇입니까?
- 25. 레이크 작업을 수행하는 방법
- 26. LINQ에서이 작업을 수행하는 방법?
- 27. Apache에서이를 수행하는 방법은 무엇입니까?
- 28. .NET 응용 프로그램에서 오디오 작업을 수행하는 데 권장되는 방법은 무엇입니까?
- 29. ajax의 결과에 따라 다른 js 작업을 수행하는 방법은 무엇입니까?
- 30. @ synthesize'd 접근 자 이전에 작업을 수행하는 방법은 무엇입니까?
ShootDownHook이 올바른 방법 인 것 같습니다. http://resackoverflow.com/questions/2541597/how-to-gracefully-handle-the-sigkill-signal-in-java – Heisenbug