긴 폴링 요청에 대한 설명이 필요합니다. 나는 긴 폴링을위한 스크립트를 만들었고, nginx에서 (표준 설정으로) 시도해 보았다. 나는 어떤 것을 알아 차렸다. 서버가 응답하지 않으면 60 초 후 로그 브라우저에서 nginx가 503 오류를 반환하므로 서버가 응답 할 때만 요청이 만료되지 않도록 할 수 있습니까? 가능하다면 어떻게 할 수 있습니까? 가능하지 않은 경우 서버가 중지되거나 (60 초) 또는 그 전에 (시간 표시)까지 요청을 확장하도록 권합니다. 이전에 신청서를 해지 할 것을 어떻게 권고합니까?Nginx의 긴 폴링 - 조언 및 설명
답변
client_body_timeout 및 client_header_timeout 60 초 후 서버가 비어있는 응답을 (전송 당신이 그 값을 원하는 시간에
client_body_timeout 1m; # or 60s
client_header_timeout 1m;
변경을 찾고 있지만, 일반적으로 사용되는 방법은 예를 들어 무엇인지 아마 연결 종료), 클라이언트가 새로운 요청을 다시 시작합니다. 또한 60 초 정도 지속됩니다. 사용자가 요청을 끝내지 않았지만 실제로 브라우저를 닫으면 타임 아웃을 기다리고있는 많은 쓸모없는 열린 커넥션.
편집 : 그렇지 않으면 당신은 200 개 성공 504 오류가없는거야, 요청이 응용 프로그램이 응답을 보낼 수 있도록, Nginx에 의해 만료하지 마십시오. 예를 들어, 60 초 동안 긴 폴링을하고 싶다면 nginx를 90 초 또는 120 초로 설정하고, 애플리케이션이 60 초를 초과하면 빈 출력을 보내거나 'end'와 같은 메시지가 없다는 메시지를 보내야합니다 '또는'stop '을 입력하면 자바 스크립트는 중지 메시지를받은 후 새 요청을 시작해야합니다. 또한 자바 스크립트를 사용하면 서버가 구분 기호 또는 무언가를 사용하여 연결을 종료하지 않고도 여러 메시지를 보낼 수 있습니다.
또한 한 가지 방법이 모든 작업에 적합하지만 항상 좋은 것은 아닙니다. 크롬과 같은 브라우저 파이어 폭스는 Server Sent Events 또는 Web Sockets과 같은 더 멋진 방법을 사용할 수 있습니다. 지원되지 않는 예를 들어 서버에서 보낸 이벤트를 사용하려는 경우 현재 브라우저에서 지원되는 기능을 확인하고 가장 좋은 기능을 사용하는 파서 라이브러리가 많이 있습니다. IE에서는 아직 this example과 같은 것으로 쉽게 처리 할 수 있으며 IE에서만 긴 폴링으로 폴백합니다.
내가 열어두기를 권장하는 시간은? 타임 아웃이 발생했을 때 서버에 요청을 만료 시키려면 아무런 문제가 없습니다. – user2584820
1 분이면 충분합니다. 많은 연결을 남겨두면 아마 많은 양의 램을 사용하게 될 것이고 서버의 최대 연결이 초과되면 오래된 것 중 하나가 될 때까지 새 것을 열 수 없을 것입니다 예를 들어 6 시간 동안 가지고 있고 분당 1 명의 방문자가있는 경우 6 시간이 지나면 360 개의 연결이 열리 며 트래픽이 많을수록 더 많은 트래픽이 발생합니다. facebook chat uses 40과 60 초 사이의 무언가의 연결, 나는 정확한 숫자를 기억하지 못합니다. –
많은 질문을하고 마지막 질문을하고 대답을 수락하십시오. 서버에 요청을 만료 시키려면 (즉, 60 초 후 서버 종료) 서버를 종료하거나 위험하므로 60 초 전에 비어있는 메시지를 클라이언트에 보내기 전에 몇 초 만료되도록하는 것이 가장 좋습니다. – user2584820