📜  heroku node js h21后端连接被拒绝 - Javascript(1)

📅  最后修改于: 2023-12-03 15:01:07.875000             🧑  作者: Mango

Heroku Node.js H21后端连接被拒绝 - Javascript

当使用Heroku作为主机,采用Node.js编写后端时,有时会收到一个H21错误,即后端连接被拒绝。该错误通常是由于Heroku的负载均衡机制发现某个连接异常,导致该连接被终止。

原因

导致H21错误的原因很多,可能是应用程序出现内部错误,也可能是网络连接超时,亦或是机器资源不足等等。以下是一些常见的原因:

  • 超时请求:如果Heroku等待请求响应的时间超过了30秒,则会抛出H21错误。
  • 内存不足:当应用程序请求过多内存或服务器端内存达到限制时,Heroku将终止该进程并返回H21错误。
  • 网络连接异常:如果网络连接中断或失败,Heroku将终止该进程并返回H21错误。
  • 代码错误:应用程序中的代码错误可能会导致请求失败并返回H21错误。
  • 负载过高:请求量过大或同时请求过多可能会导致Heroku服务器无法承受,从而返回H21错误。
解决方案

虽然H21错误可能由多种因素引起,但以下方法可能有助于解决该错误:

方法1:增加超时时间

Heroku默认请求响应时间为30秒,因此可以尝试增加请求超时时间以避免出现H21错误。可以在应用程序中增加以下代码来设置超时时间:

const express = require('express');
const app = express();
const server = app.listen(process.env.PORT || 3000, function (){
  var port = server.address().port;
  console.log("App now running on port", port);
});

server.timeout = 1000 * 60 * 2; //2 minutes

上面的代码将超时时间设置为2分钟,可以根据具体情况适当调整。

方法2:增加内存或使用缓存

内存不足是导致H21错误的常见原因之一,因此可以考虑增加内存限制或在应用程序中使用缓存来降低内存压力。在Heroku中,可以使用以下命令来增加内存限制:

heroku config:set NODE_OPTIONS="--max_old_space_size=512"

上面的命令将内存限制增加到512MB,可以根据具体需求适当调整。

方法3:优化代码

代码错误可能是导致H21错误的另一种常见原因,因此可以尝试优化代码以避免此类错误。可以使用一些工具来分析代码并发现可能的问题,例如ESLint、JSLint等。

方法4:扩展服务器

如果负载过高是导致H21错误的主要原因,可以考虑增加服务器的数量来提高系统的可用性和容错性。在Heroku中,可以使用以下命令来增加服务器数量:

heroku ps:scale web=2

上面的命令将服务器数量增加为2,可以根据具体需求适当调整。

方法5:尝试其他方案

如果以上方法都无法解决H21错误,可以尝试其他方案,例如更改请求方式、更换网络等等,以找到最佳解决方法。

总结

Heroku Node.js H21后端连接被拒绝错误可能由多种因素引起,可以通过设置超时时间、增加内存限制、优化代码、扩展服务器以及尝试其他方案等方法来解决该错误。如果以上方法仍然无效,可以考虑联系Heroku支持或寻求其他方式解决问题。