24.07.06 00:05 작성
·
83
0
사용자가 온라인 된 경우 1로 bit를 업데이트 하고
이후에 통신이 되지 않으면 비트값이 추가로 업데이트 되지 않는다 설명하셨는데
그 사이에 어떤 동작으로 통신이 되지 않는지 여부를 확인하는지, 비트는 어떻게 처리되는지에 대한 설명이 없어 이해가 어렵네요.
매 분마다 요청이 온다는 가정하에 비트값을 매분마다 1씩 업데이트 하는데, 해당 요청이 없어서 비트값이 더 이상 업데이트 하지 않게 되면, 해당 시간만큼 오프라인 상태였다
이 시나리오가 맞을까요?
그렇다면 서버에서 임의의 시간, 예시로 3분 이상 미 접속시 오프라인이라 평가하여 커뮤니티 웹, 온라인 게임이나 채팅 등의 사용자의 온라인 여부가 필요한 서비스에서 해당 값을 참고하여 특정 시간에서 부터 bit 증가가 없다면 오프라인이라 평가하게 된다고 보면 될까요?
그런데 이렇게 하면 시:분으로 시작하는 key로 부터 bit는 접속하게 되는 분 단위가 되는거고, 다른 사용자가 이 사용자의 온라인 상태를 알고자 한다면, 현재 시간에서 key와 bit를 연산한 시간을 비교해야 온라인인지 여부를 알 수 있게 되는건데 제가 이해하고 있는게 맞는지 알고 싶습니다.
답변 1
0
2024. 07. 06. 00:11
안녕하세요. 중간 통신 여부를 확인하기 보다는 클라이언트에서 특정 요청이 오는 경우에 대해서만 요청 시간에 맞는 사용자의 상태 bitmap 값을 1로 업데이트 하게 되면 그 시간 동안 사용자를 활성 상태로 볼 수 있습니다.
예제에서는 1분 단위의 고정된 key의 bitmap을 사용하기 때문에 10분 30초에 사용자가 서버로 어떤 요청을 보냈고, 이 때 10분에 해당하는 bitmap 값을 1로 업데이트하면, 해당 사용자는 10분~11분 사이에는 활성 상태로 볼 수 있습니다. 이후에 요청이 없다면 사용자는 비활성화 상태로 판단할 수 있습니다.
반드시 이런 방법으로 활성 상태를 관리해야 하는 것은 아니고 redis bitmap을 이용하면 적은 데이터로 이런 상태를 관리할 수 있다고 이해하시면 됩니다.
2024. 07. 06. 00:46
맞습니다. 이 방법으로 실시간의 정확한 온/오프라인 여부는 알기 어렵습니다. 그래서 강의 내용 중 이 방식의 특징에 대한 설명으로 "실시간 성을 완벽히 보장하지는 않는다"는 것이 그런 의미입니다. 실시간으로 정확한 상태를 추적하기 위해서는 별도로 웹 소켓 등을 사용하셔야 합니다.
2024. 07. 06. 00:31
시나리오대로 라면, 요청이 올 때만 새로운 시간과 결합된 key를 생성하고 bit를 1 업데이트 하게 되고
다른 사용자는 해당 key를 바탕으로 온라인 여부를 확인하기 때문에
1분전 온라인 혹은 5분전 온라인 상태로 받아들이게 되는것이 맞을까요?
이 방법으로 현재 온라인인지 아이면 오프라인인지는 알 수 없기 때문에 해당 사용자의 마지막 접속 여부만 확인할 수 있는게 아닌가 싶습니다.