2011-11-18 3 views
1

PHP와 Javascript로 코딩 된 shoutbox가 있으며 MySQL을 사용합니다. 이 기능은 다음과 같습니다. 우리는 새로운 외침을 확인하는 refresh.txt 파일을 가지고 있습니다. 새로운 외침이 있다면 새로운 외침을 잡기위한 데이터베이스 호출이 있습니다.Shoutbox : 활성 사용자 수를 계산하는 가장 좋은 방법

이제 shoutbox의 주요 문제점은 CPU 사용량입니다. 그래서 서버에 너무 많은 추가 스트레스를주지 않으면 서 활성 사용자 수를 계산할 수있는 방법이 있는지 궁금합니다. 아마도 Javascript를 통해?

안타깝게도 거기에 추가 된 새로운 기능이므로 손으로 사용할 소스 코드가 없습니다. 도움을 주시면 감사하겠습니다.

답변

1

같은 타사 제품을 사용하는 거라고? 그렇다면 세션 저장 디렉토리에 count the number of active session files 만 있습니다. 이것은 CPU를 많이 사용하지 않으며 데이터베이스 호출을 필요로하지 않습니다.

이 경우에도 데이터베이스 호출을 피하는 경우 개인 파일이 다른 클라이언트 (예 : IP 주소)를 추적하고 서버에서 자원을 마지막으로 요청한 시간을 추적 할 수 있습니다. +1 in this question에 대해 자세히 알아보기 바랍니다. 그러나 여러 네트워크 사용자가 동일한 네트워크 (예 : 학교 또는 기업)에서 방문하는 경우 논리적 인 오류가 발생하며 쿠키 또는 세션을 사용하여 개별 사용자를 기록하는 것이 해결책입니다.

long polling (자바 스크립트). 서버와의 연결을 유지하고 간혹 새 데이터가 있는지 확인합니다. 이는 사용하지 않는 사용자, 세션별로 또는 쿠키 수를 계산할 때 유용 할 수 있습니다.

+0

매우 흥미로운 대답입니다. 나는이 옵션들을 지금부터 살펴볼 것입니다. 우리는 포럼 디렉토리에 SMF를 사용하고 있습니다. 100 %는 작동하지 않습니다. 세션이 저장되어 있다고 생각합니다. 데이터베이스에. 이상적인 솔루션은 온라인에있는 사용자의 목록을 얻을 수 있어야합니다. 주된 이유 지난 15 분 동안 포럼이 온라인으로 만 저장할 수 있기 때문에 할 수 있습니다.하지만 온라인에 더 많은 정보가 있다는 것을 알고 있습니다. 누가 실제로 온라인인지 잘 알 것입니다. –

+1

Simple Machine의 온라인 사용자 (및 손님) 수는 저의 경험으로는 상당히 정확합니다. 당신이 여전히 자신 만의 것을 원한다면, 나는 관련시킬 수 있습니다. 가족 웹 사이트의 경우 AJAX 기반의 shoutbox 기능을 처음부터 새로 만들었습니다 (jQuery 포함). 온라인에 단 한 명의 사용자 만있는 경우 전혀 폴링하지 않아 자원을 절약합니다. 온라인에있는 사용자가 많을수록 폴링 횟수가 많아집니다 (매 10 초가 넘음). 사용자가 페이지를로드 할 때마다 데이터베이스에서 마지막 활동 시간을 업데이트했습니다. 나는 이것이 소규모 프로젝트에 효율적이라는 것을 알았다. 나는 많은 것을 배웠다. – Matt

1

단순히 활동 카운터가 있습니다. 지난 4 분 동안 활동 한 사람을 계산하십시오. 그런 다음 JS를 사용하여 서버에서 10 초마다 해당 번호를 요청하십시오.

그렇지 않으면, 차라리 그냥이 사용자가 PHP 세션으로 로그인 http://www.shoutmix.com

+0

나는이 답을 좋아한다. 4 분마다 전화를 걸고 온라인 목록에 표시된 전화를 받으십시오. 생동감 있고 집중적이지는 않습니다. 나는 SMI를 사용하고 있기 때문에 SSI를 사용할 수 있고 온라인으로 로그온 할 수있는 who_is를 호출 할 수있다. 그런 다음 shoutbox에서 실제 숫자가 JS 인 통계 카운터가 여전히 필요하다. –

관련 문제