하트비트 시 서버에서의 연결 종료
안녕하세요 좋은 강의감사합니다.
소켓연결 종료 시 클라이언트가 먼저 끊게 유도하라고 하셨는데
만약 서버에서 주기적으로 N초마다 하트비트를 보내고 클라이언트에서 응답이 없을 경우 서버에서 연결을 종료해야 하지 않나요??? 혹시 이 상황에선 보편적으로 어떻게 하는지 궁금합니다.
답변 2
0
서버가 하트비트를 요구하는 경우도 있지만 보통의 경우는 클라이언트가 일정 주기로 보냅니다. 서버에서는 클라이언트로부터 하트비트를 포함해 일정 주기로 데이터가 오지 않으면 연결이 끊긴 것으로 판단하기도 합니다. 하트비트는 그 자체로 부하이므로 가급적 최소화 하는 것이 바람직하기 때문입니다.
그리고 마치 Java에서 가비지 콜렉팅을 하듯 각 세션의 마지막 통신 기록을 검사해서 기준 시간 이상 아무런 통신이 없었다면 연결이 사실상 끊긴 것으로 판단하는 방법이 병행됩니다.
다 이런 구조를 갖는 것은 아니지만 보편적인 대응방법으로 참고하시면 되겠습니다. 😄
0
안녕하세요, 인프런 AI 인턴입니다.
이승우님 질문하신 서버에서의 하트비트 처리와 관련하여 소켓 프로그래밍에서 흔히 적용되는 방식은 다음과 같습니다.
서버는 클라이언트로부터 주기적으로 하트비트 메시지(또는 신호)를 받아서 클라이언트의 연결 상태를 확인합니다. 만약 설정한 시간동안 하트비트 메시지를 받지 못할 경우, 클라이언트가 연결을 유지하지 않고 있거나 네트워크 문제 등으로 인해 연결이 끊긴 것으로 간주할 수 있습니다. 이때 서버는 해당 클라이언트와의 연결을 종료하기로 결정할 수 있습니다.
이러한 방식은 리소스 관리 및 서비스의 안정성을 유지하는 데 도움이 됩니다. 서버 측에서 연결을 종료하는 것은 주로 클라이언트가 예상되는 동작을 하지 않을 때, 예를 들어 응답이 없거나 하트비트 신호를 보내지 않을 때 취하는 조치입니다. 이와 같은 메커니즘은 클라이언트와 서버 간의 연결 상태를 검증하고, 유효하지 않은 또는 더 이상 활성화되지 않은 연결을 제거하여 시스템 자원을 효율적으로 사용하는 데 중요한 역할을 합니다.
따라서 하트비트를 이용한 연결 상태 확인은 매우 보편적이고, 서버가 특정 시간 동안 클라이언트로부터 응답을 받지 못할 경우 연결을 종료하는 것은 일반적인 방식 중 하나입니다.
recv, send 리턴값 질문
0
75
2
스타,워크와 같은 디스창 (Disconnected)도 비정상 종료에 대응하는 시스템으로 봐야할까요?
0
96
2
수업과 관련해서 읽어볼 만한 책 있나요?
0
110
1
서버가 끊어버리는것에 대한 질문
0
121
2
shutdown()을 호출하는 이유
0
163
1
프로토콜이 적용된 파일 송신 서버에서 send, recv 질문 있습니다!
0
152
2
"파일 송신 서버 제작" 강의 질문입니다!
0
151
2
대표적인 장애 유현 2
0
131
2
대표적인 TCP 장애 유현
0
160
2
이벤트 기반 파일 입출력과 callback 기반 파일 입출력이 네트워크에도 쓰이는 기법인가요?
0
120
2
개발환경 질문이 있습니다.
0
137
1
TCP/IP vs UDP , 멀티 스레드에서의 병목 현상에 대한 질문이 있습니다!
0
221
2
메모리 관련 문제로 질문드립니다.
0
186
2
테스트 환경 질문드립니다!
0
168
2
ThreadAcceptLoop 의 우아한(?) 종료에 대해 질문드립니다.
0
419
2
강사님 질문 드립니다.
0
249
1
소켓 입/출력 설계 정리
0
450
1
멀티스레드 기반 서버 관련 질문..!
0
410
2
TIME_WAIT 관련 문의드립니다.
0
226
1
강사님 강의자료 인쇄용으로 부탁드립니다.
0
288
1
bind 함수 관련 궁금증
0
357
2
스마트포인터 사용여부 및 가능성
0
259
2
CreateThread()를 사용하여 클래스의 멤버함수를 실행할 수 는 없나요?
0
631
2
0강 Win32 작업자 스레드 동기화 9:33~
0
318
2





