如何在heroku中设置超过30秒的响应超时

2023-12-06

伙计们,如果响应返回时间超过 30 秒,Heroku 将终止请求,那么有什么方法可以让我等待响应返回呢?

好吧,用户正在上传他的文件,我需要对服务器中的文件执行一些操作,更新完成后,我将向用户提供下载链接。但服务器处理文件的时间大多超过30秒,用户需要等待响应


来自 Heroku 官方帮助中心:https://devcenter.heroku.com/articles/request-timeout

超时值不可配置。如果您的服务器需要超过 30 秒才能完成给定请求,我们建议将该工作移至后台任务或工作线程以定期 ping 您的服务器以查看处理请求是否已完成。此模式可以释放您的 Web 进程来执行更多工作,并减少总体应用程序响应时间。

简短的回答是:不,您无法更改此配置。我建议您调查一下为什么您的应用程序需要 30 秒以上的时间来处理该请求。如果花费的时间超过 10 秒,您确实应该考虑 Heroku 帮助中心建议的步骤????

你的问题

您提到您需要这个来进行文件处理。据我了解,文件处理时间很可能会超过 30 秒。通常我要做的就是创建某种任务引用并将其与状态(“处理”,“完成”,“失败”)一起保存在数据库中 - 还存储原始文件,然后结束请求用户。这应该不会花很长时间。然后处理任务...使用另一个端点或 websocket 连接,用户可以检查任务是否已完成。

使用任务队列

以下只是解决方案的基本解释 - 它不适用于复制和粘贴,因为它取决于很多事情。

路线(终点)

基本上你的后端需要有 3 条路由。一份用于上传文件,一份用于下载已处理的文件,一份用于检查任务的状态。

1. 上传

app.post('/files', /* some middleware e.g. multer */, async (req, res) => {
  
  // This is your upload controller
  // I assume at this point the file has been uploaded and
  // req.file contains a reference to the uploaded file. 

  // create new process task and add to queue
  const task = await createNewTask(req.file); 
  queue.push(task);

  // now a task has been created, but the user
  // doesn't need to wait for it to finish
  // so let's end the request here. 
  return req.status(200).json(task); 

});

2. 检查状态

app.get('/task/:id', async (req, res) => {
 
  // From uploading a file in the first step, you'll
  // get back a task id. Use the task id to check on 
  // the status. 

  const task = await getTask(req.params.id);
  if (!task) {
    return res.status(404).end();
  } else {
    return res.status(200).json(task);
  }

});

该任务可以包括状态、进度百分比、原始文件名、新文件名等信息,甚至是完成后处理的文件的下载链接。状态可能是这样的pending, processing, finished or failed.

3. 下载

app.get('/file/:filename', (req, res) => {
  return req.status(200)
            .sendFile('./path/to/file/' + req.params.filename);
});

Notes

  • 使用随机 ID(例如 uuid)重命名传入文件可能是个好主意。因此,在自动化过程中与他们合作会更容易。随机id也可以同时用于任务id。

  • 这取决于你想要多大的规模。对于任务队列,有许多不同的库可以帮助您解决这个问题。它可以是内存中的队列,也可以是由数据库支持的队列。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在heroku中设置超过30秒的响应超时 的相关文章

  • 使用 AWS Lambda 从 AWS S3 读取并提取巨大的 zip 文件

    我正在开发数据管理应用程序 客户可以上传zip file approx 250 MB 与多个text files approx 1500 MB on AWS S3 但由于记忆有限aws lamda 最大 1536MB 大小 我能够提取 50
  • 使用admin sdk在云函数中执行firestore集合组查询?

    firestore collectionGroup 方法在云函数中与 firebase admin sdk 一起使用时出现错误 是否可以在云函数中对 firestore 进行集合组查询 这是我尝试使用的 firestore 查询方法 htt
  • MongoDB,从数组中删除对象

    Doc id 5150a1199fac0e6910000002 name some name items id 23 name item name 23 id 24 name item name 24 有没有办法从数组中提取特定对象 IE
  • 如何在 PyV8 中加载 Nodejs 模块?

    如何在 PyV8 中加载 Nodejs 模块 我读过所有关于 jsdom 在与 Nodejs 一起运行时有多么出色的内容 如果我在 Python 应用程序中运行 v8 使用 python 获取 Web 资源 然后将生成的 html 字符串提
  • 如何在 Jenkins 服务器上运行 Jest 测试

    我正在尝试运行我的Jest https facebook github io jest 在 Jenkins 部署期间进行测试 如果我 ssh 进入服务器 我可以 sudo 进入 Jenkins 用户并从工作区成功运行测试 但是 当我尝试从
  • Nodejs - 处理和发送多部分请求,

    我的应用程序在 Nodejs 服务器上运行 Node Js 还充当来自应用程序的请求的中间件 代理 因此 从浏览器开始 所有 REST 调用都会转到 NodeJs 然后转到 Java API 我发现处理多部分表单数据的请求时出现问题 我在
  • 语法错误:elasticdump 中的exports.runInThisContext (vm.js:53:16) 处出现意外标记 {

    我试图使用elasticdump 将elasticsearch 数据从一台服务器移动到另一台服务器 当我给予 elasticdump input http 192 168 0 122 9200 my index output http lo
  • 自动备份远程托管服务器的最佳实践

    我正在尝试设置一个用于团队笔记的服务器 我想知道自动备份其数据 又称我的笔记 的最佳方法是什么 目前我计划在 docker 镜像中运行服务器 docker 镜像将由托管服务 例如 Google 托管 我找到了一个适合我的需求的免费托管服务
  • 如何使用 Nodejs 创建 Excel 文件?

    我是一名 Nodejs 程序员 现在我有一个数据表 我想将其保存为 Excel 文件格式 我该怎么做呢 我找到了一些 Node 库 但其中大多数是 Excel 解析器而不是 Excel 编写器 我使用的是 Linux 服务器 因此需要一些可
  • 如何使用 Karma 测试 NodeJS 后端代码(testaulous)

    如何设置 Karma 来运行我的后端单元测试 用 Mocha 编写 如果我将后端测试脚本添加到files 它未能说明require未定义 你不知道 Karma 仅用于测试基于浏览器的代码 如果您的项目在后端有 mocha 测试 在前端有 k
  • Node.js 检测两个猫鼬查找何时完成

    我正在尝试使用自动完成功能初始化两个输入library https www devbridge com sourcery components jquery autocomplete 当我加载页面时 我将触发 Ajax 来初始化两个输入文本
  • S3.getSignedUrl 接受多种内容类型

    我正在使用react s3 uploader节点包 它接受一个signingUrl用于获取用于将对象存储到 S3 中的signedUrl 目前 我已经配置了一个 lambda 函数 带有 API 网关端点 来生成此signedUrl 经过一
  • 护照:登录和帐户注册的不同重定向

    我在我的应用程序中使用护照模块 github身份验证 我想根据操作进行重定向 我检查这是否只是正常登录或者用户是否第一次登录 passport use new GitHubStrategy clientID conf github app
  • 带有 npm 启动脚本的 Nodejs 应用程序

    我对nodejs很陌生 在我的docker化环境中 我想为nodejs应用程序提供appdynamics支持 这要求每个应用程序都要求将以下内容作为其应用程序的第一行 require appdynamics profile controll
  • 未能将一些参考推送至 [email protected]

    当我尝试推送到 Heroku 存储库时收到此错误 我已经设置了autocrlf false在gitconfig中 但这个问题仍然存在 我也尝试过这个解决方案here https stackoverflow com questions 566
  • 为什么此 HTTP 请求在 AWS Lambda 上不起作用?

    我正在开始使用 AWS Lambda 并尝试从我的处理程序函数请求外部服务 根据这个答案 https stackoverflow com a 27932216 473467 HTTP 请求应该可以正常工作 而且我还没有找到任何其他说明的文档
  • 无法在适当的时间对域调用 dispose

    我有一个问题domain模块 目前 我正在尝试捕获请求中引发的任何未捕获的错误 使用express中间件和域 所有请求在调用之前都会通过此函数路由next并继续走正确的路线 app use req res next gt domain cr
  • 多次部署后 Heroku Slug 大小

    我有一个红宝石 on Rails非常接近 slug 大小限制 300mb 的应用程序 我已经尽可能地减小了尺寸 slugignore但还没有得到我想要的结果 一时兴起 我尝试创建一个新的Heroku应用程序并向其部署相同的 git 存储库
  • 如何针对 Node.js 中发生的每个错误发送电子邮件?

    假设我的 node js 应用程序正在运行 如果出现错误 我的意思是所有错误 不仅仅是网络错误 如果出现错误 则很重要 我如何调用函数向我发送电子邮件 基本上 在我希望它写入 err out 之前 我希望向我发送一封电子邮件 我正在使用no
  • 使用 postgres 和 node js 在单个语句中执行多个查询

    我需要在像这样的单个语句中执行插入和删除查询 INSERT INTO COMPANY ID NAME VALUES 1 Paul DELETE FROM COMPANY WHERE ID 12 这是我用于执行查询的 node js 代码 p

随机推荐

  • 如何使用 C# 迭代和统计 Word 文档中的修订次数?

    我一直在寻找这个问题 但找不到任何答案 所以希望这里的人可以提供帮助 我正在用 C 编写一个 WinForms 应用程序 其中我使用 Word Application Compare Documents 来比较两个文档并获取一个结果文档 其
  • shouldAutorotate To InterfaceOrientation:从未调用过

    我在 部署信息 下将支持的界面方向设置为除纵向倒置之外的所有方向 我想重写 shouldAutorotateToInterfaceOrientation 以实现自定义行为 即根据条件支持景观 由于限制 自定义视图转换 我只有一个视图控制器
  • 如何使用 AVAudioPlayer 在 iPhone sdk 中暂停和恢复同一首歌曲

    我想暂停这首歌 然后在 iPhone 中使用编程方式从该持续时间点继续播放 当我尝试暂停歌曲并再次开始播放我暂停的歌曲时 如何对其进行编码 是否有任何直接属性或建议任何代码可以解决我的问题 void playMusic path NSBun
  • 如何使用 Nuxt 2 转译 node_modules 中的依赖项?

    我读过有关转译的问题node modulesNuxt 但据说新的 Nuxt 2 已经解决了这个问题transpile选项中的nuxt config js file https nuxtjs org api configuration bui
  • 从 Beam 管道连接 google cloud sql postgres 实例

    我想从在谷歌数据流上运行的 apache beam 管道连接谷歌云 sql postgres 实例 我想使用 Python SDK 来完成此操作 我无法为此找到适当的文档 在云SQL如何指导我没有看到任何数据流文档 https cloud
  • Xcode 4.5 中的当前位置错误

    在 Xcode 4 5 中 苹果引入了苹果新地图 我的应用程序大量需要地图服务 我注意到在我的应用程序中它显示了错误的当前位置 直到您删除应用程序并重新打开它才显示正确的当前位置 有时不会 顺便提一下 当我连接到 4G 时 它显示的当前位置
  • javax.el.PropertyNotWritableException:value =“”:设置操作的非法语法[重复]

    这个问题在这里已经有答案了 我有这个表格
  • Javascript:检查两个div之间的碰撞

    有什么方法可以检查名称为 character 的 DIV 是否与名称为 ground 的 DIV 重叠 我想用干净的 Javascript 来做到这一点 我知道 jQuery 更好 但这就是我不想要的 我看到了这个帖子 检查某些div之间的
  • Solr:在数据导入期间转换逗号分隔字段

    我正在使用 Solr 3 5 0 我正在从 JDBC 数据源导入 并且有一个分隔字段 我希望将其拆分为各个值 我正在使用RegexTransformer但我的领域没有被分割 样本值 Bob Carol Ted Alice 数据配置 xml
  • 编译并运行动态代码,而不生成EXE?

    我想知道是否可以编译并运行存储的代码 而不生成 exe 或任何类型的其他文件 基本上从内存中运行该文件 基本上 主应用程序将具有一些存储的代码 可能会更改的代码 并且需要编译代码并执行它 无需创建任何文件 创建文件 运行程序 然后删除文件不
  • 实体框架DbContext无需查询并通过外键更新值

    我有一个更新一些表的方法 对于更新我需要首先获得TestProcess 但我不喜欢这样 我怎样才能更新TestProcess没有select firstOrDefault 操作 仅用于更新操作 方法示例 public void Update
  • 如何动态地分块重塑矩阵? [复制]

    这个问题在这里已经有答案了 假设我有A 1 8 11 18 21 28 31 38 41 48 现在我想将所有内容从第 4 列向前移动到行位置 我该如何实现这一目标 A 1 2 3 4 5 6 7 8 11 12 13 14 15 16 1
  • 如何处理“变量时间”(DATE、双精度、8 字节)?

    我似乎找不到任何有关 变体时间 的信息 DATE 双精度 8 字节变量 被处理 我有一个不同的时间 A 哪个值是 41716 892329 如果我转换 A 使用 变体时间到系统时间 or COle日期时间 我明白 2014 03 18 21
  • 移动向量会使迭代器失效吗?

    如果我有一个向量迭代器a 然后我移动构造或移动分配向量b from a 该迭代器是否仍然指向同一个元素 现在在向量中 b 这就是我在代码中的意思 include
  • 如何使用存储过程在sql server 2008中拆分字符串并将数据插入表

    我想以这种格式分割一个字符串 引用 date 10 10 2000 age 13 date 01 01 2001 age 12 date 02 02 2005 age 8 实际上这个字符串只是一个示例 我的原始字符串非常大 我不明白的是 如
  • 在 ASP.NET MVC 2 中 - 如何将路由值获取到导航控制器中,以便突出显示当前链接?

    我正在尝试将当前路线放入导航控制器中 以便在填充导航菜单数据时可以运行比较 我的链接对象是这样的 public class StreamNavLinks public string Text get set public RouteValu
  • Struts2;为 StrutsSpringTestCase JUnit 测试保持会话打开

    我的项目架构是带有 Spring 集成和 JPA Hibernate 的 Struts2 StrutsSpringTestCase 基类用于 JUnit 集成测试 正常情况下 web xml 中的以下配置使单个会话从每个请求的开始到结束保持
  • 退出应用程序会让人不悦吗?

    继续尝试学习 Android 我只是阅读以下 问题 用户是否可以选择终止应用程序 除非我们添加一个菜单选项来杀死它 如果不存在这样的选项 用户如何终止应用程序 答案 Romain Guy 用户不这样做 系统会自动处理此问题 这就是 Acti
  • OpenCV 中的人脸识别

    我试图使用 OpenCV 2 2 来自 Willow Garage 构建一个基本的人脸识别系统 PCA Eigenfaces 我从之前关于人脸识别的许多帖子中了解到 没有标准的开源库可以为您提供所有人脸识别功能 相反 我想知道是否有人使用过
  • 如何在heroku中设置超过30秒的响应超时

    伙计们 如果响应返回时间超过 30 秒 Heroku 将终止请求 那么有什么方法可以让我等待响应返回呢 好吧 用户正在上传他的文件 我需要对服务器中的文件执行一些操作 更新完成后 我将向用户提供下载链接 但服务器处理文件的时间大多超过30秒