2012-07-06 5 views
3

NodeJS를 사용하여 긴 폴링 기법을 구현하려고합니다.동일한 브라우저에서 둘 이상의 연결에 긴 폴링

이 기본 코드는 서버에 배포했습니다.

http = require('http'); 

function onRequest(request, response) { 
    console.log('onRequest reached'); 
} 

http.createServer(onRequest).listen(8080); 
console.log('Server has started.'); 

localhost : 8080을 요청하면 onRequest가 실행됩니다. 이 연결이 살아있을 때 두 번째 탭에서 같은 페이지를 요청하지만 onRequest는 시작되지 않습니다. 그러나 다른 브라우저에서 동일한 페이지를 요청하면 onRequest가 실행되지만 첫 번째 연결은 여전히 ​​"긴 폴"상태입니다.

브라우저에 제한이 있습니까? 어떻게 그리고 왜 이런 일이 일어나는가? 어떻게 이것을 피할 수 있습니까?

btw. 긴 폴링 채팅 및 알림 시스템을 구현하려고합니다. 실제로 요청은 AJAX 호출에 의해 이루어져야합니다.

답변

3

브라우저가 응답을 기다리고있을 수 있습니다.

function onRequest(request, response) { 
    response.writeHead(200, {'Content-Type': 'text/html'}); 
    console.log('onRequest reached'); 
} 

또 다른 팁 : 즉시, 바로 헤더를 보내십시오 당신이 긴 폴링을 사용하려고하는 경우, 당신이 Server-Sent Events 들여다 좋습니다. 이것에 대한 광범위한 브라우저 지원이 있으며 구식 브라우저의 경우 polyfill도 있습니다. node.js 서버에서 이벤트를 보내는 방법을 보여주는 example in CoffeeScript입니다.

+0

보내는 헤더가 즉시 도움이되지 않습니다. –

+3

괜찮습니다. HTTP/1.1 스펙에 따르면 브라우저는 동일한 서버에 동시에 최대 2 개의 연결 만 열어야합니다. 당신의 문제가'/'와'/ favicon.ico' 또는 다른 것을 요구하는 첫 번째 창에서 오는 것인지 확실하지 않습니다 ... 어쨌든 긴 폴링을 사용하면 큰 단점이 있습니다. –

+0

오. 나는 또한 약 2 연결 한계를 읽었습니다. 그러나 /favicon.ico에 대해 잊어 버렸습니다. :) 이제는 이것을 피할 방법이 필요합니다. Facebook은 그의 채팅으로 무엇을합니까? –