서버: 하트비트에 응답하고 일정 시간 못 받으면 연결을 먼저 정리(TCP_KEEPIDLE·TCP_USER_TIMEOUT 조정), 재접속하면 세션 토큰으로 기존 세션을 교체해 이어 받기. 클라이언트: 게임 수준 하트비트를 수 초~수십 초 간격(가장 짧은 유휴 타임아웃의 절반 이하)으로 보내기, 끊기면 자동 재접속.
인프라팀 할 일
코드가 따로 정하지 않는 소켓이 따르는 커널 기본값(tcp_keepalive_time 등) 낮추기(SO_KEEPALIVE를 켠 소켓에만 적용).
수치 감각
리눅스 기본값은 7,200초 유휴 상태면 확인을 시작해 75초 간격으로 프로브를 9번 보내고, 끝까지 응답이 없으면 연결을 끊습니다. 합치면 약 2시간 11분입니다. 윈도우도 기본으로 2시간 유휴 상태여야 확인을 시작합니다.
그래프에서는
일부만 높음 · 연결별 마지막 수신 뒤 경과 시간
확인할 곳
ss -tnoi로 연결별 lastrcv(마지막 수신 뒤 경과 ms)와 keepalive 타이머(timer:(keepalive,…))를 보고, 게임 서버의 “이미 접속 중” 거절 기록과 맞춰 봄
이러면 맞음
lastrcv가 수 분~수 시간인 ESTABLISHED 연결이 남아 있고 그 계정의 재접속이 “이미 접속 중”으로 거절됨
이러면 아님
오래 조용한 연결이 없는데 “이미 접속 중”이 나오면 게임 서버의 세션 정리 코드 쪽
확인 수단
인프라 도구로 확인(게임 코드 불필요)
출처
tcp(7) — Linux manual pageLinux man-pages 7,200초 유휴 뒤 75초 간격 프로브 9번(약 11분 추가), SO_KEEPALIVE를 켠 소켓에만 적용, TCP_KEEPIDLE·TCP_USER_TIMEOUT