HTTP를 통한 사용자 상태 (onine/offline)를 추적 할 때 가장 큰 문제점은 사용자가 오프라인 상태가되었는지 판단하는 것입니다.
사용자가 온라인 상태 일 때 쉽게 판단 할 수 있습니다. 인증 된 요청이있는 것만으로도 사용자가 활성 상태라고 가정합니다. 그러나 HTTP는 상태가 없으므로 이후 요청이 없으면 사용자가 오프라인이되었거나 온라인 상태이지만 최근에 앱과 관련된 특정 작업을 수행하지 못했음을 의미 할 수 있습니다.
따라서 가장 좋은 추측은 시간 제한을 설정하고 해당 제한 시간 동안 사용자가 요청하지 않은 경우 오프라인 상태로 전환하는 것입니다.
가장 간단한 구현은 Jonathan Sampson이 제안한대로 lastTimeActive를 사용하는 것입니다. 그러나 이것은 사용자 세션의 길이를 알려주지 못하며, 현재 누가 온라인에 접속했는지에 대한 근사치 만 제공합니다.
더 복잡한 접근 방식은 lastTimeActive 및 lastTimeLoggedIn을 갖는 것입니다. LastTimeLoggedIn은 첫 번째 인증 요청시 이전 인증 요청으로부터 5 분 이상으로 설정됩니다. 지난 5 분 내에 인증 된 요청이있는 경우 사용자는 온라인으로 간주됩니다. 사용자의 세션 길이는 lastTimeActive와 lastTimeLoggedIn의 시간 차이입니다.
앱이 사용자에게 로그 아웃 할 수있는 선택권을 제공하는 경우 해당 작업을 오프라인으로도 간주합니다. 그러나 앱이 은행 용 앱이 아니라면 사용자가 브라우저를 닫을 가능성이 있습니다.
또한 사용자의 오프라인/온라인 상태를 업데이트하기위한 배경 스레드는 피하십시오.특정 사용자의 상태에 대한 명시적인 요청이 있고 요청한 사용자 만 업데이트해야하는 경우에만 위의 로직을 실행해야합니다.
오, 안돼 ... 그건 끔찍한데 ... 서버를 죽일거야 ... – Faruz
나는 1000.000 명 이상의 사용자가있는 포털을 운영하고있다. 그러나 한 번에 100 명의 온라인 사용자 만 있습니다 (1 % 미만). 사용자 테이블을 쿼리하는 대신 새 테이블을 선택/업데이트/삭제하는 것이 좋습니다. –