当前位置: 首页 > 面试题库 >

如何在Heroku上与Node.js交流Web和Worker dynos?

庞瀚
2023-03-14
问题内容

Web Dynos 可以处理HTTP请求

Web Dynos 处理它们时, Worker Dynos 可以处理它的工作。

但是我不知道如何使 Web DynosWorker Dynos 相互通信。

例如,我想通过 Web Dynos* 接收HTTP请求 *

,将其发送给 Worker Dynos

,处理工作并将结果发送回 Web Dynos

,在Web上显示结果。

在Node.js中可以吗?(使用RabbitMQ或Kue等)?

我在Heroku文档中找不到示例

还是仅在 Web Dynos中 实现所有代码并仅扩展 Web Dynos


问题答案:

正如有关后台作业和排队的高级文章所建议的那样,您的Web dynos将需要通过一种中间机制(通常是队列)与您的worker dynos进行通信。

要完成听起来像您希望做到的那样,请遵循以下一般方法:

  • Web dyno收到Web请求
  • Web dyno将作业添加到队列中
  • 工人dyno收到队列中的工作
  • 工人dyno执行作业,将增量进度写入共享组件
  • 浏览器端轮询从Web dyno请求作业状态
    • Web dyno查询共享组件的后台作业进度,并将状态发送回浏览器
  • Worker dyno完成作业的执行并将其在共享组件中标记为完成
  • 浏览器端轮询从Web dyno请求作业状态
    • Web dyno查询共享组件的后台作业进度,并将完成的状态发送回浏览器

就实际实现而言,我不太熟悉Node.js中最好的库,但是将此过程粘合在一起的组件可以作为附件在Heroku上获得。

队列:AMQP是一种受支持的队列协议,CloudAMQP附加组件可用作您的Web和工作人员动态之间的消息队列。

共享状态:您可以使用Postgres附加组件之一来共享正在处理的作业的状态,或者共享性能更高的内容(例如Memcache或Redis)。

因此,总而言之,您必须使用中间附加组件在Heroku上的dyno之间进行通信。尽管这种方法需要更多的工程设计,但其结果是正确解耦和可扩展的体系结构。



 类似资料:
  • 问题内容: 我有一个非常普通的Express应用程序- 简单的服务器逻辑,视图,许多客户端JS。我必须执行许多AJAX请求。其中一些需要通过HTTPS协议保护(某些不需要)。 因此,我的服务器应同时使用HTTP和HTTPS。它也应该在本地计算机(正常运行nodemon)和Heroku上都可以工作。 据我了解,Heroku为您提供了一个您可以监听的端口(process.env.PORT),并通过代理

  • 我用Node.js设置了Socket.io,它通过侦听/连接到端口8000(或另一个不是服务器运行端口的端口)在本地开发机器上工作。 当我试图在heroku上做同样的事情时,客户端脚本导入失败了。 我尝试过相对路径 编辑:我实际上是在使用geddy mvc框架,我想让它在heroku上如何设置(基本上就像socket.io一样),我发现这个答案让我看起来可以类似地使用它:GeddyJS&socke

  • 我正在流式录制的PCM音频从一个浏览器与web音频API。 我正在用binaryJS(websocket连接)将它流到一个nodejs服务器上,并尝试使用speaker npm模块在服务器上播放该流。 这是我的当事人。音频缓冲器首先是非交错的IEEE 32位线性PCM,标称范围在-1至+1之间。我从两个PCM频道中的一个开始,并在下面进行流式传输。 现在我接收数据作为缓冲区,并尝试将其从npm包写

  • 我正在开发一个基于nodejs和postgresql的corona病毒项目。我正在尝试在heroku上部署我的应用程序,但我遇到了一些问题。这些问题来自postgres配置(我认为)。 我有一个. env文件,其中我初始化了一些变量(DATABASE_URL,...),但我不知道如何将它们传输到heroku。我关联了一个插件postgres-heroku,它会生成一个具有随机值的DATABASE_

  • 我想在我的Android Tecno droipad上安装Termux上的Heroku,但每次试用后我都会收到以下消息: $apt install heroku读取包列表…完成构建依赖树读取状态信息…完成E:无法定位包heroku 这是我运行命令时得到的结果:$apt安装heroku。 安装赫鲁库我该怎么办?

  • 在Heroku上部署我的应用程序破坏了websockets协议。 它在localhost上工作,而不是在Heroku上。在浏览器中,我得到: 到'wss:/node-omi.herokuapp.com/socket.io/?eio=2&transport=WebSocket&sid=*'的WebSocket连接失败:WebSocket握手期间出错:意外响应代码:503 在服务器端,我获得日志: 2