2012-12-14 64 views
0

我在网络编程相对较新,所以这可能是显而易见的一些,但不是我。请求/响应对如何匹配异步请求?在极端情况下,我可能有一个异步jQuery请求,它会调用使用node.js的服务器,并且也是异步的。如果我做了很多这种类型的调用,看起来请求/响应会混淆起来。有哪些设施可以确保他们不会混淆?匹配响应与请求node.js

+1

传输(HTTP)不是异步的,但是它在服务器上的处理是&client端。特定的tcp连接(如果多个请求同时运行有几个)是已知的,并且每个连接都有自己的句柄,并且应用程序没有办法“忘记”哪个连接用于什么操作/回调。 – Wrikken

回答

0

请求和它们的响应不会混淆在一起,因为通常将回调函数提供给启动对服务器的请求的函数。节点将两者连在一起。

例如:

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功能将启动,以谷歌的请求和节点将参考存储到您的回调函数(函数(RES){...})。

然后,节点将继续执行您当前的函数(在http.get之后的任何代码),直到它不再有任何代码执行为止。

只要谷歌开始发送响应并且节点没有做其他事情,节点就会找到你的函数,相应的响应对象将被传递给它,为你准备好使用它。

节点是单线程的,这意味着它一次不能做超过1个事情。这就是为什么它不会调用你的回调函数,直到它完成执行谷歌已经回复的当前功能

看看这里的更多信息:http://nodejs.org/api/http.html#http_class_http_clientrequest

PS:你没有提供一个回调函数。但是,如果你不这样做,你永远不会知道请求是否成功。所以最好总是提供一个。至少它应该记录任何错误。