2013-08-08 6 views
0

긴 폴링을 시도하고 있습니다. jquery ajax를 사용하여 서버의 PHP 스크립트를 호출합니다. 나는 우리의 사무실에 대한 간단한 채팅 시스템을 만들려고 노력하고있어php sleep/usleep가 서버에 부담을 줄까요?

function getlatest($a){ 

    $stmt = $dbconnect->prepare("SELECT `timestamp` FROM `test`"); 
    $stmt->execute(); 
    $stmt->bind_result($r); 
    $timestamp = array(); 
    while($stmt->fetch()) 
    { 
     array_push($timestamp,$r); 
    } 

    asort($timestamp); 
    $x = end($timestamp); 

    if($x > $a){ 
     //do this 
    } else { 
     sleep(5); 
     getlatest($a); 
    } 

} 

:

내 코드입니다. 약 100 명의 연결된 사용자가 하루 동안이 스크립트를 실행합니다.

위의 샘플 코드는 많은 양의 시스템 리소스를 사용합니까?

나는 이미 내 호스팅에서 마지막 경고를 받았기 때문에이 온라인 상태로두고 테스트 할 수 없습니다.

+2

스레드가 정지됩니다. 그렇습니다. 하지만 왜 루프를 사용하지 않는거야? stackoverflow 예외 오류가 발생할 때까지 잠시 후 코드가 메서드 스택을 채 웁니다. (클라이언트 쪽에서 잘 수면) – KarelG

+0

글쎄, 실제로이 일할 수있는, 당신은 시스템 리소스의 대량으로 무슨 뜻 이냐에 따라 달라집니다. 나는 끝없는 루프 (심지어 스크립트를 처리하는 동안 버퍼를 업데이 트 플러시와 함께)에 대한 PHP를 사용하지 않을거야, 대신 일부 PHP는 소켓 채팅보세요. –

+0

'$ a'는 어디서 났습니까? – BlitZ

답변

0

이 함수를 사용하면 끝없이 반복되며 PHP는 서버 측이며 스크립트 실행을 마친 후 출력을 시작합니다. 그래야만 사용자 브라우저로 전송됩니다. 왜 자바 스크립트에서 setInterval을 사용하지 말고 사용자 브라우저가 그렇게할까요?

+0

메신저 jquery 아약스를 사용하여 위의 스크립트를 호출하십시오. 그리고 아약스는 위 값이 반환 될 때까지 닫히지 않습니다. –

+0

값을 반환하지 않기 때문에 동일한 함수를 계속 호출합니다. getlatest 함수 내에서 getlatest에 대한 호출을 제거하고 jquery가 간격을 처리하게하십시오. – Garytje

+0

나는 그것을 알고있다. 그게 내가 왜 'php sleep/usleep가 서버에 부담을 줄까요?'라고 묻는 것입니다. 샘플 코드의 간격이 사용자 측이 아닌 서버 측이기 때문입니다. –