2009-10-29 4 views
1

http 요청을 만들어 8 분 이상 걸립니다. 나를 위해,이 장기 실행 요청 괜찮아요. 문제없이 내 브라우저에 응답을 보낼 수 있습니다. (나는 서버와 같은 네트워크에 위치 함).오래 실행중인 HTTP 연결은 응답을 다시받지 못합니다.

그러나 일부 사용자의 경우 브라우저는 응답을 반환하지 않습니다. (참고 : 동일한 http 요청이 1 분 안에 실행되면이 사용자는 문제없이 응답을 볼 수 있습니다.)

이러한 사용자는 다른 네트워크에 있습니다. 그리고 아마 그들의 위치와 서버 사이에 방화벽이나 두 개의 방화벽이있을 것입니다.

피들러에게 요청이 응답을 기다리는 중임을 볼 수 있습니다.

지금 방화벽이 유휴 http 연결을 죽이고 있다고 가정하고 있습니다. 그러나 확실하지 않습니다.

왜 응답이 돌아 오지 않는지 또는 연결이 끊어지지 않는 이유를 알고 있다면 정말 도움이 될 것입니다.

기타 : 요청을 서버로 보낸 후에도 서버로 보내는 더미 신호를 유지 관리하는 애플릿을 작성하여이 문제를 해결할 수 있습니까?

답변

1

사용자가 방화벽/NAT 게이트웨이 연결 추적을 사용하고있을 수 있습니다. 이러한 게이트웨이는 일정 기간 동안 아무 일도 일어나지 않을 때 TCP 연결을 끊는 경향이 있습니다. 사용자 정의 프로토콜에서 TCP 연결을 유지하기 위해 하트 비트 메신저를 보낼 수 있지만 HTTP를 사용하면 해당 연결을 제대로 제어 할 수 없으며 HTTP가 TCP 연결을 "활성"상태로 유지하는 데 필요한 것을 용이하게합니다.

HTTP 요청으로 초기화 된 장기 실행 작업을 처리하는 일반적인 방법은 백그라운드에서 해당 작업을 시작하여 클라이언트에 즉시 적절한 응답을 보내고 애플릿/ajax 요청에서 해당 작업의 상태를 폴링하고 완료되면 결과를 반환합니다.

빠른 수정이 필요한 경우 서버와 사용자 사이의 게이트웨이에서 시간 초과를 제어 할 수 있는지 확인하십시오.

+0

나의 마지막 코멘트에서 나는 사용자가 IIS 서버에서 오래 실행되는 요청을 실행할 수 있다고 언급했습니다. 대부분의 손가락이 방화벽을 가리키고 있다고하더라도 ... 나는 그 결론에 도달하기가 어렵습니다. btw, 요청이 실패한 서버는 linux + weblogic/websphere입니다. – rjk2008

+0

이 주석을 답으로 표시했지만 솔직히 말하면 문제 해결에 더 가깝지 않습니다. 서버 측에서 새로운 도구 (빙원, 혜성 등)를 사용하지 않고 "긴 시간"동기화 프로세스를 수행하는 방법을 찾으면 여기에서 업데이트됩니다. 현재 폴링은 asynch보다 더 매력적이지 않습니다. – rjk2008

+0

Ethereal을 사용하여 방화벽의 각 다리에서 패킷을 모니터링하는 방법을 찾아보십시오. 패킷이 어디서든 멈출 지 확인하십시오.아파치는 기본적으로 300 초로 설정되는 간단한 Timeout 지시자를 가지고있다.이 지시자는 응답 시간 초과를 제어한다. Websphere는 시간 초과 구성의 phleora를 갖고있는 것으로 보이지만 조정할 필요가있는 것을 고칠 수는 없습니다. 그러나 조정할 필요가있는 설정이 있습니다. 아마도 ConnectionResponseTimeout – nos

0

사용자가 특정 시간이 지난 후 브라우저가 응답 대기를 멈추게하는 HTTP 시간 초과가있는 브라우저를 사용하고 있다고 생각하십니까?

+0

문제가하려고 사용하는 경우 ... 그래서 나는 그것의 브라우저와 관련 있다고 생각하지 않는다. – rjk2008

0

http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/overview.html
http://tldp.org/HOWTO/TCP-Keepalive-HOWTO/usingkeepalive.html

당신이 리눅스 시스템이 사용자가 AA 윈도우 IIS 서버에가는 긴 요청을 실행할 수 있었다,

# cat /proc/sys/net/ipv4/tcp_keepalive_time 
    7200 
# cat /proc/sys/net/ipv4/tcp_keepalive_intvl 
    75 
# cat /proc/sys/net/ipv4/tcp_keepalive_probes 
    9 

# echo 1500 > /proc/sys/net/ipv4/tcp_keepalive_time 
# echo 500 > /proc/sys/net/ipv4/tcp_keepalive_intvl 
# echo 20 > /proc/sys/net/ipv4/tcp_keepalive_probes 
관련 문제