2010-07-23 6 views
0

GM_xmlhttpRequest (greasemonkey xmlhttpRequest)를 사용하여 내 앱과 통신하고 있습니다. 30 초마다 페이지의 상태를 업데이트하기 위해 json을 보냅니다. FireFox에서 3 페이지를 실행 중입니다. netstat -a을 사용하여이 결과를 얻었습니다.연결이 너무 많습니다.

이것은 200 줄이 넘습니다. 왜 이렇게 많은 포트를 사용하고 있습니까?! 내가 어떻게 ... 이렇게하지 않을 수 있니? 여전히 내 응용 프로그램과 통신합니다.

참고 : 정상적인 xmlhttpRequest가 작동하지 않을 것입니다 (나는 havent 시도했습니다. 나는 jquery를 래퍼로 사용합니다)

(예 : google.com)의 3 페이지는 내 도메인
Active Connections 

    Proto Local Address   Foreign Address  State 
    TCP 0.0.0.0:1234   My-PC:0    LISTENING 
    TCP 127.0.0.1:1234   My-PC:19204   TIME_WAIT 
    TCP 127.0.0.1:1234   My-PC:19205   TIME_WAIT 
    [line 8...] 
    [line 221...] 
    TCP 127.0.0.1:1234   My-PC:19420   TIME_WAIT 
    TCP 127.0.0.1:1234   My-PC:19421   TIME_WAIT 
    TCP 127.0.0.1:1234   My-PC:19422   TIME_WAIT 
    TCP 127.0.0.1:1234   My-PC:19423   TIME_WAIT 
+0

문제가 무엇인지 알 수 없으므로 왜 정상적인 xmlhttpRequest를 사용하면 더 좋을지 생각합니다.이 두 가지 점을 명확히 해 주시겠습니까? – erikvold

+0

Erik Vold : 정상적인 xmlhttpRequest가 더 좋을 것이라고 말하지 않습니다. 나는 단지 그것을 시도한 havent 말하고있다. 오래 전에 시도하기로 결정 했으므로 (localhost가 동일한 도메인이 아니기 때문에) 작동하지 않습니다. 그래서. 예외 없음. –

+1

그래, 난 아직도 당신의 문제를 이해하지 못한다. 한 손으로 당신은 너무 많은 연결이 만들어지고 있다고 말하고, 다른 한 편에는 당신이 그것이 0.5 초마다 요청하기를 원한다고 말한다. 1 초마다 1 초마다 요청이 이루어 집니까? – erikvold

답변

0

TIME_WAIT는 연결이 닫혔다는 것을 의미하지만 일부 패킷이 잠시 동안 주변에 떠 다니는 경우에도 잠시 동안 유지됩니다. 이는 통신하는 두 컴퓨터 간의 대기 시간 지터 때문에 필요합니다. 지터는 한 컴퓨터에서 다른 컴퓨터로 이동하는 데 걸리는 시간이 일정하지 않다는 것을 의미합니다. 따라서 가까운 패킷을 얻은 다음 다른 패킷을 얻을 수 있습니다. 운영 체제가 src IP, src 포트, dst IP, dst 포트 조합을 즉시 재사용하면 이러한 다른 패킷이 혼란 스러울 수 있습니다 (패킷 손상/스푸핑 공격처럼 보임). 따라서 운영 체제는 잠시 동안 리소스에 위치합니다.

나는 잘 모르겠다.하지만 TIME_WAIT에 운영체제가 얼마나 오랫동안 앉아 있을지를 잘 알고있다. 무엇보다 중요한 질문 인 것처럼, 자원을 많이 먹기 때문에 사이트가 대량 인 경우 문제가 될 수 있습니다. 또한, "많은 포트를 사용하고있다"고 말할 때, 클라이언트에있는 포트만 사용하고있는 것입니다. 새로운 연결을 할 때마다 클라이언트는 클라이언트 측 포트 번호로 새로운 포트를 사용합니다. 결국 충분한 연결을하면 이전에 사용 된 포트 번호가 다시 사용됩니다. 이것은 클라이언트 측에서 실제로 문제가 아니며, 문제가있는 서버입니다. 단지 "포트의 수"문제가 아니라 연결 수 (즉, 로컬 주소가 서버 응용 프로그램과 일치하는 행 수)의 문제입니다.

관련 문제