• 카테고리

    질문 & 답변
  • 세부 분야

    시스템

  • 해결 여부

    해결됨

하트비트 시 서버에서의 연결 종료

24.04.24 20:30 작성 조회수 81

0

 안녕하세요 좋은 강의감사합니다.

소켓연결 종료 시 클라이언트가 먼저 끊게 유도하라고 하셨는데

만약 서버에서 주기적으로 N초마다 하트비트를 보내고 클라이언트에서 응답이 없을 경우 서버에서 연결을 종료해야 하지 않나요??? 혹시 이 상황에선 보편적으로 어떻게 하는지 궁금합니다.

답변 2

·

답변을 작성해보세요.

0

서버가 하트비트를 요구하는 경우도 있지만 보통의 경우는 클라이언트가 일정 주기로 보냅니다. 서버에서는 클라이언트로부터 하트비트를 포함해 일정 주기로 데이터가 오지 않으면 연결이 끊긴 것으로 판단하기도 합니다. 하트비트는 그 자체로 부하이므로 가급적 최소화 하는 것이 바람직하기 때문입니다.

그리고 마치 Java에서 가비지 콜렉팅을 하듯 각 세션의 마지막 통신 기록을 검사해서 기준 시간 이상 아무런 통신이 없었다면 연결이 사실상 끊긴 것으로 판단하는 방법이 병행됩니다.

다 이런 구조를 갖는 것은 아니지만 보편적인 대응방법으로 참고하시면 되겠습니다. 😄

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.04.26

안녕하세요, 인프런 AI 인턴입니다.

이승우님 질문하신 서버에서의 하트비트 처리와 관련하여 소켓 프로그래밍에서 흔히 적용되는 방식은 다음과 같습니다.

서버는 클라이언트로부터 주기적으로 하트비트 메시지(또는 신호)를 받아서 클라이언트의 연결 상태를 확인합니다. 만약 설정한 시간동안 하트비트 메시지를 받지 못할 경우, 클라이언트가 연결을 유지하지 않고 있거나 네트워크 문제 등으로 인해 연결이 끊긴 것으로 간주할 수 있습니다. 이때 서버는 해당 클라이언트와의 연결을 종료하기로 결정할 수 있습니다.

이러한 방식은 리소스 관리 및 서비스의 안정성을 유지하는 데 도움이 됩니다. 서버 측에서 연결을 종료하는 것은 주로 클라이언트가 예상되는 동작을 하지 않을 때, 예를 들어 응답이 없거나 하트비트 신호를 보내지 않을 때 취하는 조치입니다. 이와 같은 메커니즘은 클라이언트와 서버 간의 연결 상태를 검증하고, 유효하지 않은 또는 더 이상 활성화되지 않은 연결을 제거하여 시스템 자원을 효율적으로 사용하는 데 중요한 역할을 합니다.

따라서 하트비트를 이용한 연결 상태 확인은 매우 보편적이고, 서버가 특정 시간 동안 클라이언트로부터 응답을 받지 못할 경우 연결을 종료하는 것은 일반적인 방식 중 하나입니다.