javascript - 当没有服务器可用于处理请求时,Node.js 需要更好地理解 http.request 操作

标签 javascript node.js

从 Nodejs.v8.11.3 API 文档中,我试图更好地理解 http.request 的行为(形成嵌入式 http 模块)。据我了解,当您调用 http.request 方法时,如下所示:

var req = http.request( options, function(res) {
   res.on('data',function(chunk) {...});
   res.on('end',function() {...});
});

req.end();
req.setTimeout(2*60*1000, function() { 
   req.abort(); 
}

http.request 返回 http.ClientRequest 对象,并且 callback 提供设置处理程序来处理响应的方法。返回的 ClientRequest 对象表示一个“排队”请求,并且在调用 req.end() 方法之前不会发送实际请求。

此外,我们还可以定义一个连接超时,我相信当连接已建立并且底层套接字并且套接字在指定的毫秒内处于非事件状态时会发出该超时。

我的问题是如果没有服务器响应请求会发生什么?如果没有可用的服务器,request.end() 是否会触发某些事件或错误条件?

据我所知,由于没有建立连接,因此永远不会发出超时事件。

当没有服务器可以处理请求时,调用代码的正确行为是什么?该请求将排队并最终在服务器上线时得到处理。那是对的吗?

在等待服务器响应时,调用代码应该做什么?这些调用是非阻塞的,如果您的主要任务是从发出的 http.request 读取/处理数据,那么在等待服务器响应时您的代码应该做什么?是否在循环中使用 setInterval ?我错过了什么?

如果您能帮助我们更深入地了解如何构建代码来解决这种情况,我们将不胜感激。

最佳答案

My question is what happens if there is no server to respond to the request?

查看文档:

In the case of a connection error, the following events will be emitted:

  • 'socket'
  • 'error'
  • 'close'
<小时/>

The request is queued and will eventually be handled when a server comes on-line. Is that correct?

没有。连接尝试将被拒绝,因为没有服务器正在监听。没有自动重试。

关于javascript - 当没有服务器可用于处理请求时,Node.js 需要更好地理解 http.request 操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51657796/

相关文章:

javascript - knockoutjs - 文本区域中的 html

javascript - 如何获取具有相同id的多个输入值

node.js - Google Apps 脚本出现错误 : Script Error in Node. js

javascript - CORS 中间件在 NodeJS 中不起作用

javascript - 将这些常见的断言保存在一个单独的文件中并且不再重复是个好主意吗?

node.js - 如何知道投影已完成并需要在 CQRS 中发布实时订阅事件?

javascript - Protractor by.repeater 找不到任何东西

javascript - BreezeJs - 带参数的 Ajax 调用,无缓存

javascript - 单击时的 window.location.assign 在 iOS 中不起作用

javascript - Node js 事件监听器未按预期工作