2012-12-14 6 views
0

웹 프로그래밍에서 나는 비교적 새로운 것이므로 일부는 분명하지만 나에게는 그렇지 않을 수 있습니다. 요청/응답 쌍이 비동기 요청과 어떻게 일치합니까? 극단적으로 비동기 jQuery 요청을 node.js 사용하고 또한 비동기있는 서버에 호출 할 수 있습니다. 이러한 유형의 호출을 많이하면 요청/응답이 섞일 것으로 보입니다. 그들이 섞이지 않도록하기 위해 사용할 수있는 시설은 무엇입니까?node.js에 대한 요청과 일치하는 응답

+1

전송 (HTTP)은 비동기 적이 지 않지만 서버에서 처리하는 것은 클라이언트 측과 같습니다. 특정 tcp 연결 (여러 개의 요청이 동시에 실행되는 경우 여러 개가 있음)은 알려져 있으며 각각 자체 핸들을 가지고 있으며 어떤 작업/콜백에 대한 연결인지 '응용 프로그램이'잊어 버릴 방법이 없습니다. – Wrikken

답변

0

일반적으로 서버에 대한 요청을 시작하는 함수에 콜백 함수를 제공하므로 요청 및 응답을 혼합 할 수 없습니다. 노드는 두 개를 함께 유지합니다. 예

다음 http.get 기능 Google에 요청을 시작하며 노드 콜백 함수에 대한 참조를 저장할

http.get("http://www.google.com/index.html", function(res) { 
    console.log("Got response: " + res.statusCode); 
}).on('error', function(e) { 
    console.log("Got error: " + e.message); 
}); 

(함수 (고해상도)를 {...}).

노드는 더 이상 실행할 코드가없는 지점까지 현재 함수 (http.get 이후에 나오는 코드)를 계속 실행합니다.

Google에서 응답을 다시 보내고 노드가 다른 작업을 수행하지 않는 즉시 노드가 사용자의 기능을 찾고 대응하는 응답 객체가 전달되어 사용 준비가 완료됩니다.

노드는 단일 스레드이므로 한 번에 두 개 이상의 작업을 수행 할 수 없습니다. 그래서 현재 함수가 실행 완료 될 때까지 콜백 함수를 호출하지 않습니다. google이 응답했습니다. http://nodejs.org/api/http.html#http_class_http_clientrequest

PS :

는 추가 정보를 원하시면 여기를 보라는 콜백 함수를 제공 할 필요가 없습니다. 그러나 그렇지 않으면 요청이 성공했는지 여부를 알 수 없습니다. 따라서 항상 제공하는 것이 좋습니다. 적어도 오류를 기록해야합니다.

관련 문제