2011-05-15 5 views
1

간단한 온라인 게임을위한 소켓 연결을 만드는 Java로 프로그램을 작성했습니다. 서버가 다중 클라이언트이고 기록 된 사용자 목록이 있습니다. 클라이언트를 닫으면 사용자에게 로그 아웃하라는 메시지가 서버로 전송됩니다. 나는 또한 클라이언트가 Eclipse의 "종료"버튼 (또는 Windows 작업 관리자)으로 종료 될 때 클라이언트가 동일한 메시지를 전송하기를 원한다. 나는 ShootdownHook으로 시도했지만 작동하지 않는다. 어떤 생각? 감사합니다. .프로세스 종료시 작업을 수행하는 방법은 무엇입니까?

+0

ShootDownHook이 올바른 방법 인 것 같습니다. http://resackoverflow.com/questions/2541597/how-to-gracefully-handle-the-sigkill-signal-in-java – Heisenbug

답변

1

견고한 시스템을 갖추려면 서버가 연결을 닫을 수 있도록 하트 비트 메커니즘을 구현해야합니다. 예를 들어, 클라이언트가 최근 30 초 동안 하트 비트를 설정하지 않은 경우, 연결을 닫으십시오. 클라이언트와 서버 간의 네트워크가 다운 된 경우 또는 클라이언트가 실행중인 시스템이 추악한 사망으로 사망 한 경우를 생각해보십시오. 이 경우 클라이언트의 로그 아웃 메시지를 서버에 전달할 수 없습니다.

그런데, 나는 셧다운 훅이 실제 네트워크 IO를하기에는 너무 늦었다 고 생각한다. 성공적으로 종료 후크를 사용하여 닫기 연결을 닫습니다. 따라서 다른 종료 작업 - 특히 연결 종료 -이 시작되기 전에 메시지가 전송되는 더 공식적인 종료가 필요할 것입니다.

+0

감사합니다. 내가 말했듯이, 로그 아웃뿐만 아니라 클라이언트가 수행 한 다른 작업도 확인해야합니다. 나는 심장 박동 기작을 할 것입니다. – Simon

0

클라이언트 측에서 수행 할 수있는 작업으로 Eclipse에서 빨간색 사각형이 작동하지 않습니다. 그것은 극단적 인 편견으로 jvm을 끝내고 - 코드는 실행되지 않습니다. 후크도, 아무것도.

@Dilum에서 설명한대로 서버 측에서 대처할 수 있습니다.

관련 문제