2009-07-28 4 views
5

AJAX/COMET을 기반으로 한 온라인 채팅방을 쓰고 있습니다. 나의 디자인은 다음과 같습니다다른 브라우저의 시간 초과 동작?

이 ----------------- 기다릴

요청 ------------------- ------> 덤프 데이터 보내기

----------------- 대기 ------------------ -------> 덤프 데이터 보내기

----------------- 대기 ----------------- --------> 덤프 데이터 보내기

----------------- 대기 ---------------- ---------> 덤프 데이터 보내기

----------------- 대기 -------------------------> 덤프 데이터 보내기

------ 무언가가 발생했습니다. 응답을 받으십시오.

또 다른 요청 ..... ....

보시다시피, 서버는 요청을 잡고 뭔가를 기다릴 일이, 어떤 이벤트가, 단지 데이터 마무리 요청을 밀어 일어난이있는 경우. 그런 다음 클라이언트는 다른 요청을 사용합니다. 요청에 틱이 있으므로 두 요청의 간격 사이에 이벤트가 발생하면 서버는 클라이언트에 대해 보류중인 이벤트가 있음을 알고 있습니다.

브라우저가 시간 초과되기 전에 서버는 클라이언트가 시간 초과되지 않도록 일부 유휴 데이터도 보냅니다.

이제 문제가 발생합니다. 다른 브라우저의 시간 초과 동작은 무엇입니까? 브라우저가 요청을 보내고 데이터를 기다리는 것을 알고 있습니다. 기다릴 시간이 너무 오래 걸리면 시간 초과가 발생합니다. 하지만 다른 브라우저의 시간 초과 동작은 무엇입니까? 그리고 브라우저의 타임 아웃 동작을 제어 할 수있는 헤더가 있습니까? 브라우저의 타임 아웃 동작을 알고, 어떻게 처리 할 지 결정할 수 있습니다. 어디에서 그 데이터를 찾을 수 있습니까?

+0

이 대답을보십시오. http://stackoverflow.com/a/1343963/779408 – breceivemail

답변

9

실제로 클라이언트가 프록시를 통과 할 수 있기 때문에 다른 브라우저의 시간 초과 값은 명시 적으로 생각한 것만 큼 의미가 없습니다.

오히려 나는 왜 시간 초과를 처리해야하는지 물어볼 것입니다. 브라우저에 스트리밍을하지 않아도 매번 막지 않을 것입니다. 따라서 연결이 끊어지면 클라이언트의 서버를 간단히 다시 쿼리하는 것이 가장 좋습니다. 많은 사람들이 당신이하려고하는 것처럼 긴 폴링을 권장하는 이유 중 하나입니다. 스트리밍 솔루션을 선택하든 오래 설문 ​​조사를 선택하든 관계없이 연결 재설정을 허용해야합니다.

단순한 숨겨진 iframe 클라이언트 설정은 it's not too hard to do이며 사용중인 클라이언트 측 프레임 워크에 따라 XHR 요청도 마찬가지입니다.

대부분의 최신 브라우저에 대한 시간 초과는 IE (60 분? 와우)에서는 rather large이고 FF (대략 : config에서는 300 초 - eek)에서 짧아집니다.하지만 제가 말했듯이 그것이 당신을 도와주지 않습니다 프록시는 프록시 관리자가 구성한 방법에 따라 제한 시간이 2 분 이하로 짧을 수 있습니다.

따라서 요약하면 타임 아웃이 발생합니다. 너는 그들을 막을 수 없다. 클라이언트가 발생했을 때 다시 연결하도록 코드를 작성하고 (서버의 회전 속도를 줄이기위한 제한이 있음) 더 이상 걱정하지 마십시오. 더 강력해질뿐만 아니라, 쓸모없는 데이터를 주기적으로 모든 클라이언트에게 보내지 않으므로 코드가 더 효율적으로 작동합니다.