2017-05-24 97 views
0

对不起,如果这是非常明显的!我在试图了解node.js如何响应来自浏览器的请求方面遇到困难。我已经浏览了互联网上的教程,其中express.js用于使用node.js构建剩余的服务器端代码。现在除了建立起承诺的路线之外。所以很显然,只有在承诺解决时才会回复回复。因此,流量为 -node.js如何同步返回对REST Web服务的响应?

//一号线

浏览器 - > REST服务

//二号线

REST服务 - >找到路径 - >打服务 - > GET数据 - >发送数据返回给浏览器

上第二行的整个过程是在异步模式。那么是否会有一个线程挂在服务器端,浏览器会等待node.js启用的REST服务返回响应?如果情况并非如此,那么浏览器或者像POSTMAN这样的REST客户端如何实时地知道响应。

编辑:

我已删除的外部链接,因为它是制造混乱。

+1

“所以会有一个线程挂在服务器端” - 为什么会有?如你所说,它使用承诺。 “ – Quentin

+1

”浏览器将等待node.js启用REST服务来返回响应“ - HTTP客户端*总是*必须等待响应。网络需要时间。这里没什么特别的。 – Quentin

+0

如果他们必须等待响应,那么服务器端的某个线程也会打开,对吧?否则,你将如何返回回应? – user3276247

回答

3

的NodeJS不使用网络请求的线程。它使用内置于操作系统中的网络异步支持。因此,nodejs中的未决网络请求不会为每个请求维护一个打开的线程。它将有一个开放的插座。 nodejs进程将在该套接字上有数据挂起时通知。

同样,承诺不会导致线程处于打开状态。承诺仅仅是一种通知方案,当异步操作完成时,基础异步操作将解析或拒绝,然后承诺可以通知已注册处理程序的代码。

在你所提供的链接,也不清楚你指的到底是哪代码。如果你想询问一些特定的代码,那么请将代码直接粘贴到你的问题中,以便明确并遵循堆栈溢出关于代码的指导原则,你所询问的代码不仅仅存在于外部链接中。

上第二行的整个过程是在异步模式。那么是否会有一个线程挂在服务器端,浏览器会等待node.js启用的REST服务返回响应?

目前尚不清楚你所说的“二线”的意思。您提供的链接中有很多代码。 nodejs内部的网络请求不会使用每个请求的线程。它们保留一个开放的TCP套接字,但是在操作系统中为套接字使用底层异步通知支持,而不是本地线程。

如果情况并非如此,那么浏览器或者像POSTMAN这样的REST客户端如何实时了解响应。

POSTMAN或REST客户端在服务器上有TCP连接(使用该TCP连接上的HTTP协议)。他们创建TCP连接,然后在该套接字上发送HTTP请求,并且该套接字在等待响应时保持打开状态。当服务器完成其业务时,它通过打开的TCP套接字发回响应。有很多不同的方式可以编写客户端代码(POSTMAN和浏览器可能会以不同的方式编写客户代码),但是当数据到达TCP套接字时,客户端会以某种方式通知有数据要读取,客户端将读取数据,处理响应,然后由于这是一个HTTP请求/响应协议,TCP连接可能会关闭。

+0

外部链接只是为了illsutrate流量=> REST服务 - >找到路径 - >打服务 - >获取数据 - >将数据返回给浏览器 我不是指任何特定的代码段。 – user3276247

+0

我也注释了第二行。反正你的答案解决了我的查询。我会接受它。感谢这样的详细回复。 – user3276247