2013-03-25 2 views
2

ajax를 사용하여 채팅 응용 프로그램을 작성하고 싶습니다. 그래서 사용자의 메시지 테이블을 100 밀리 초 (0.1 초)마다 데이터베이스에서 검사해야합니다. setTimeOut을 사용하여 매 100 밀리 초마다 아약스를 호출하면 문제가 있습니까? 성능 문제가 있습니까? 어떤 함정이나 뭐?ajax 호출에 setTimeOut 사용

+0

아무런 문제가 없지만 아약스 및 백엔드가 90 밀리 초 이내에 답변을 보낼 수 있는지 확인하십시오. –

+0

어떻게 확인할 수 있습니까? –

+0

firebug firefox를 사용하면 응답 시간과 내용이 표시됩니다 ... yslow firefox addon을 사용하여 응답 지연의 원인을 확인하십시오. –

답변

0

이것은 매우 나쁜 생각입니다. 로컬 시스템과 일부 사용자는 작동하지만 더 많은 사용자에게 쉽게 확장 할 수는 없습니다. 웹 소켓과 긴 폴링을 살펴 보길 권한다.

+2

긴 폴링을 제안하는 중입니다. 그렇다면 그 ..에 대한 예제를 제안 할 수 있습니까? 내가 알고 있듯이 long-polling은 setTimeout ... right를 사용하여 얻을 수 있습니다.? –

+1

@DipeshParmar 긴 폴링과 일반 폴링 간의 차이점은 요청이 시간 초과되는 것을 방지하고 서버가 원할 때 응답한다는 것입니다. 이전 요청이 만료되거나 완료 될 때만 새로운 요청을합니다. 서버가 응답하는 데 소요되는 시간에 따라 다음 요청을 보낼 때 setTimeout을 반드시 사용해야하는 것은 아닙니다. –

+1

@DipeshParmar가 여러 요청을 보내는 것은 긴 폴링이 아닌 짧은 간격으로 여러 번 요청하는 것입니다. 긴 폴링은 본질적으로 서버가 아무런 응답도 쓰지 않고 쓸 데이터가있을 때까지 (또는 요청 시간이 끝날 때까지 몇 초보다 긴 시간이 소요될 수 있음) 요청을 보류한다는 것을 의미합니다. 클라이언트는 현재 요청이 만료되거나 현재 요청이 데이터로 응답을받는 경우에만 새 요청을 만듭니다. – Munim

0

더 나은 대안은 Socket.IO을 사용하는 것입니다. 그것은이 작업을하게 훨씬 쉽게

Socket.IO는 socket.io

서버에서 크로스 브라우저 솔루션

예를 만든다 :

var io = require('socket.io').listen(80); 

io.sockets.on('connection', function (socket) { 
    socket.emit('news', { hello: 'world' }); 
    socket.on('my other event', function (data) { 
    console.log(data); 
    }); 
}); 

클라이언트 (브라우저) :

<script src="/socket.io/socket.io.js"></script> 
<script> 
    var socket = io.connect('http://localhost'); 
    socket.on('news', function (data) { 
    console.log(data); 
    socket.emit('my other event', { my: 'data' }); 
    }); 
</script> 

편집 :하여 setInterval과의 setTimeout :

는 PHP를 들어, phpwebsocket 클래스가 잘 맞는와 jquery plugin

+1

좋은 제안이고, 나는 node.js 개발자입니다.하지만 질문은 asp.net 및 php라고 태그가 지정되어 있습니다. ASP 않습니다.그물에는 어떤 websocket 같이 해결책이 있는가? – Munim

+0

@Munim IIS7은이를 지원하지 않지만 IIS8은 지원합니다. 나는 PHP에서 웹 소켓이 현재 가능하다고 믿는다. –

+0

저는 asp.net 개발자입니다. 어떻게 asp.net에서 이것을 사용할 수 있습니까 ?? –

0

자바 스크립트 타이머의 두 종류를 알고 클라이언트 측에 대한 것입니다. setInterval은 매 100 밀리 초마다 작동하고, setTimeOut은 이전 호출보다 100 밀리 초 후에 다음 호출을 처리합니다. 앱을 조정하는 동안이 동작을 염두에 두어야합니다. 또한 별도의 스레드에서 실제로 작업하는 웹 작업자를 고려할 수도 있습니다. 그들은 당신의 문제에 적합한 해결책으로 들리는 메시지 기반의 메시지를 전달합니다. 정확한 지연 시간 (100 밀리 초 이상)은 실제로 시험해 볼 필요가있는 것입니다. John Resig의 저서에 실용적인 타이머 지연은 브라우저마다 21ms (IE9)에서 1ms (Opera)까지 많이 다릅니다.

관련 문제