>1059> 주제글 카운터는 정확히 어떻게 작동하나요? (2)
User
2025년 2월 13일 (목) 오후 09:16:13 - 2025년 2월 14일 (금) 오전 12:54:58
2025년 2월 13일 (목) 오후 09:16:13
아무리 봐도 20명이 눈팅하고 있는 거 같지는 않은 화력이고 나메 허용 잡담판이라 출석체크? 해 보면 10명 남짓인데 주제글 카운터에는 20명이 넘게 찍히는 게 오류 같아서 질문 남깁니다.
2025년 2월 14일 (금) 오전 12:54:58
20명이 찍히면 20명이 있는 게 맞아. 정확히는 그것보다 "인간"의 수는 적을 수 있지만 이 이상 정확하게 집계할 수가 없어.
웹브라우저가 특정 주제글에 접근하면 카운터 서버에 연결되고, 해당 주제글과 게시판 채널을 대상으로 "나 지금 연결했음"이란 신호를 보내.
그리고 동일한 채널을 대상으로 30초마다 "나 아직 살아있음"이라는 신호를 보내지.
웹브라우저: 나 20번 주제글에 접속함.(최초 접속 시)
웹브라우저: 나 20번 주제글에 아직 연결중임.(30초 마다)
카운터 서버는 웹브라우저가 보낸 메세지를 확인하고 각각의 채널에 해당 연결을 IP 단위로 묶어서 저장해.
동일한 IP로 여러 탭을 통해 동일한 주제글에 연결해도 카운터는 1명으로 취급하지.
"20번 주제글 채널": {"IP 9.9.9.9": [연결1, 연결2, 연결3], "IP 7.7.7.7": [연결1]}
위 케이스는 20번 주제글에 IP 9.9.9.9가 3개의 탭 또는 웹브라우저를 통해 접속하고 있는 상태고 7.7.7.7이 하나의 웹브라우저로 접속하고 있는 상태인데, 카운터는 이 경우에 접속중인 사용자를 2로 출력해.
웹브라우저가 종료되면 웹브라우저 쪽에서 카운터 서버와의 연결을 종료해. 그러면 카운터 서버는 목록에서 해당 연결을 찾아서 지워버려. 만약 해당 연결이 해당 채널, 해당 IP의 유일한 연결이라면 IP 자체가 채널에서 추방되지.
위 예시에서 이어서 설명하면 9.9.9.9는 연결이 3개니까 하나의 연결이 지워지더라도 다른 2개의 연결이 남아있어서 여전히 채널에 집계되는 상태야. 하지만 7.7.7.7은 하나의 연결만이 존재하니까 연결1이 끊기는 순간 해당 IP 자체가 채널에서 지워지고 결국 카운터가 2 -> 1로 줄어들겠지.
웹브라우저가 30초마다 신호를 보내면 카운터 서버는 이 신호가 발송된 시간을 계속 해당 연결의 속성으로 기록해.
그리고 주기적(5초)으로 전체 연결 목록을 순회하면서 마지막으로 보낸 신호가 현재 시간과 2분 이상 차이나면 연결이 끊어진 것으로 간주하고 해당 연결을 지워버려.
그러니까 만약 카운터 서버의 집계에서 20의 결과가 나왔다면 20개의 IP에서 2분 이내에 계속 "자기가 아직 연결 중이라고 신호를 보내고 있는 상태"라는 거야.
사용자 측에서 자기가 살아있다고 신호를 보내는 상태인데 카운터 서버는 당연히 집계를 할 수 밖에 없어.
탭이 활성화 중이 아닌 상태에서도 집계하니까 실제로 해당 주제글을 "보고 있는 상태"인지는 알 수 없어. 사실 해당 탭을 보고 있는지도 추적은 하고 있는데 실제로 집계할 때는 신경쓰지 않아. 이전에 탭이 활성화 중인 애들만 집계를 했더니 "새 글이 올라오길 기다리면서 잠깐 다른 짓을 하고 있는 사용자"가 집계가 안 되는 문제가 발생했거든. 얘네는 알림 받으면 다시 그 주제글을 바로 보고 응답하는 경우가 있어서 집계에서 빼기가 좀 그래.
웹브라우저가 특정 주제글에 접근하면 카운터 서버에 연결되고, 해당 주제글과 게시판 채널을 대상으로 "나 지금 연결했음"이란 신호를 보내.
그리고 동일한 채널을 대상으로 30초마다 "나 아직 살아있음"이라는 신호를 보내지.
웹브라우저: 나 20번 주제글에 접속함.(최초 접속 시)
웹브라우저: 나 20번 주제글에 아직 연결중임.(30초 마다)
카운터 서버는 웹브라우저가 보낸 메세지를 확인하고 각각의 채널에 해당 연결을 IP 단위로 묶어서 저장해.
동일한 IP로 여러 탭을 통해 동일한 주제글에 연결해도 카운터는 1명으로 취급하지.
"20번 주제글 채널": {"IP 9.9.9.9": [연결1, 연결2, 연결3], "IP 7.7.7.7": [연결1]}
위 케이스는 20번 주제글에 IP 9.9.9.9가 3개의 탭 또는 웹브라우저를 통해 접속하고 있는 상태고 7.7.7.7이 하나의 웹브라우저로 접속하고 있는 상태인데, 카운터는 이 경우에 접속중인 사용자를 2로 출력해.
웹브라우저가 종료되면 웹브라우저 쪽에서 카운터 서버와의 연결을 종료해. 그러면 카운터 서버는 목록에서 해당 연결을 찾아서 지워버려. 만약 해당 연결이 해당 채널, 해당 IP의 유일한 연결이라면 IP 자체가 채널에서 추방되지.
위 예시에서 이어서 설명하면 9.9.9.9는 연결이 3개니까 하나의 연결이 지워지더라도 다른 2개의 연결이 남아있어서 여전히 채널에 집계되는 상태야. 하지만 7.7.7.7은 하나의 연결만이 존재하니까 연결1이 끊기는 순간 해당 IP 자체가 채널에서 지워지고 결국 카운터가 2 -> 1로 줄어들겠지.
웹브라우저가 30초마다 신호를 보내면 카운터 서버는 이 신호가 발송된 시간을 계속 해당 연결의 속성으로 기록해.
그리고 주기적(5초)으로 전체 연결 목록을 순회하면서 마지막으로 보낸 신호가 현재 시간과 2분 이상 차이나면 연결이 끊어진 것으로 간주하고 해당 연결을 지워버려.
그러니까 만약 카운터 서버의 집계에서 20의 결과가 나왔다면 20개의 IP에서 2분 이내에 계속 "자기가 아직 연결 중이라고 신호를 보내고 있는 상태"라는 거야.
사용자 측에서 자기가 살아있다고 신호를 보내는 상태인데 카운터 서버는 당연히 집계를 할 수 밖에 없어.
탭이 활성화 중이 아닌 상태에서도 집계하니까 실제로 해당 주제글을 "보고 있는 상태"인지는 알 수 없어. 사실 해당 탭을 보고 있는지도 추적은 하고 있는데 실제로 집계할 때는 신경쓰지 않아. 이전에 탭이 활성화 중인 애들만 집계를 했더니 "새 글이 올라오길 기다리면서 잠깐 다른 짓을 하고 있는 사용자"가 집계가 안 되는 문제가 발생했거든. 얘네는 알림 받으면 다시 그 주제글을 바로 보고 응답하는 경우가 있어서 집계에서 빼기가 좀 그래.
2025년 2월 14일 (금) 오후 10:04:42
>>1 엄청난 TMI