2009-06-24 3 views
1

Ajax를 사용하여 페이지를 다시로드하지 않고 일부 값을 업데이트하는 웹 페이지를 만들었습니다. 나는 XMLHttpRequest 객체를 사용하여 POST 요청을 보내고 응답이 도착하면 호출되는 콜백 함수를 할당하고 잘 작동한다.XMLHttpRequest 응답을 올바른 브라우저 콜백으로 라우팅하는 방법은 무엇입니까?

하지만 브라우저가 일부 ip : port에서 오는 일부 데이터가이 특정 콜백 함수로 전송되어야한다는 것을 브라우저에서 어떻게 알 수 있습니까? 내 말은, 최악의 시나리오에서 파이어 폭스와 IE가 같은 서버에서 대략 같은 시간에 일부 POST 요청을하고 응답이 이전 서버에 도착하기 전에 후속 POST 요청을하는 경우 데이터가 어떻게 들어오는가? 올바른 콜백 함수로 전달됩니까 ??

답변

0

각 HTTP 요청은 별도의 TCP 연결을 통해 이루어집니다. 브라우저는 단순히 데이터가 연결에 돌아올 때까지 대기 한 다음 콜백 함수를 호출합니다.

낮은 수준에서 OS의 TCP 구현은 각각의 소켓에 다른 "원본 포트"를 사용하여 각 소켓 (즉, 연결)에 속한 패킷을 추적합니다. 소켓을 열려면 원본 포트를 매핑하는 조회 테이블이있을 것입니다.

브라우저가 한 서버에 보내는 동시 연결 수가 제한되어 있습니다 (일반적으로 2). 이전에 데이터를 보내고 받기 위해 페이지를 다시로드 할 때는 재능이 있었지만 AJAX의 이러한 깨달음을 얻은 날에는 정말 귀찮은 일이었습니다. 이 문제에 대한 흥미로운 토론은 the page을 참조하십시오.

0

각 요청에는 자체 연결이 있습니다. 단일 연결 인 경우 물론 단일 응답을 가지며이 응답이 콜백에 있음을 의미합니다.

0

일반적인 생각은 브라우저가 완전히 새로운 연결을 열어 서버에 요청하고 응답을 기다리는 것입니다. 이것은 자바 스크립트 API를 통해 브라우저가 관리하는 하나의 연결입니다. 브라우저가 연결을 끊었을 때 연결이 끊어지지 않고 다시 선택됩니다. 따라서 요청을 보낸 브라우저는 요청이 완료되었을 때 수행 할 작업을 알고 있습니다.

실제로 비동기식을 만드는 것은 이러한 연결이 백그라운드에서 개별적으로 발생할 수 있기 때문에 응답을 기다리는 동안 여러 요청을 보내고 반환 할 수 있습니다. 이렇게하면 나중에 AJAX 효과를 얻을 수있는 서버가 반환됩니다.

관련 문제