打扰一下,如果这很明显!我正在努力了解node.js如何响应来自浏览器的请求。我已经浏览了互联网上的教程,其中express.js用于使用node.js构建其余的服务器端代码。现在除了建立起承诺的路线之外。所以很明显,只有当promises解决时才会发回响应。所以流程将是 -
//第1行
浏览器 - > REST服务
//第二行
REST服务 - >找到路线 - >点击服务 - >获取数据 - >将数据发送回浏览器
第二行的整个过程处于异步模式。那么服务器端是否会挂起一个线程,浏览器是否会等待node.js启用的REST服务返回响应?如果不是这样,浏览器或说POSTMAN等REST客户端如何实时了解响应。
编辑:
我删除了外部链接,因为它造成了混乱。
答案 0 :(得分:3)
nodejs不使用线程进行网络请求。它使用内置于操作系统中的网络的异步支持。因此,nodejs中的挂起网络请求不会为每个请求维护一个打开的线程。它将有一个开放的插座。当该套接字上有数据未决时,将通知nodejs进程。
同样,promises不会导致线程被打开。 Promise只是一个通知方案,当异步操作完成时,底层异步操作将解析或拒绝,然后promises可以通知已注册.then()
个处理程序的代码。
在您提供的链接中,目前尚不清楚您指的是哪个代码。如果你想询问那里的特定代码片段,那么请将代码直接粘贴到你的问题中,以便清楚地说明并遵循堆栈溢出的关于代码的指导原则,这些代码要求你不仅仅出现在外部链接中。
第二行的整个过程处于异步模式。那么服务器端是否会挂起一个线程,浏览器是否会等待启用了node.js的REST服务来返回响应?
目前尚不清楚“二线”是什么意思。您提供的链接中有很多代码。 nodejs内部的网络请求不会为每个请求使用一个线程。它们保持一个开放的TCP套接字,但在操作系统中使用底层异步通知支持来获取套接字,而不是本机线程。
如果不是这样,浏览器或说POSTMAN等REST客户端如何实时了解响应。
POSTMAN或REST客户端与服务器建立TCP连接(使用该TCP连接上的HTTP协议)。他们创建TCP连接,然后在该套接字上发送HTTP请求,并且该套接字在等待响应时保持打开状态。当服务器完成其业务时,它通过打开的TCP套接字发回响应。有很多不同的方法可以编写客户端代码(POSTMAN和浏览器可能以不同的方式编写客户端代码),但是当数据到达TCP套接字时,客户端将以某种方式通知有数据要读取,客户端将读取该数据,处理响应,然后由于这是一个HTTP请求/响应协议,TCP连接可能会被关闭。