微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Heroku上,使用Node.js是否可以防止队列工作人员dynos需要第三方API调用?

the page about using worker dynos and background jobs上的Heroku开发中心声明您需要使用工作队列来处理API调用,例如获取RSS源,因为如果服务器速度很慢,操作可能需要一些时间,并且在Web dyno上执行此操作会导致它阻止接收其他请求.

但是,根据我的阅读,在我看来,Node.js的一个主要观点是,由于其基于事件的异步运行时模型,它在这些条件下不会受到阻塞.

我很困惑,因为这不会暗示在网络动态中进行API调用(异步)是可以的吗?也许这些文档是针对同步模型更普遍的Ruby / Python / etc用例编写的?

解决方法

NodeJS是 reactor pattern的实现.NodeJS的认构建使用5个反应器.一旦这5个反应器用于IO绑定任务,主事件循环将被阻止.

关于NodeJS的一个常见误解是它是一个允许你同时做很多事情的系统.这不一定是这种情况,它允许您在等待IO绑定任务时执行其他操作,一次最多5个.

任何cpu绑定任务总是在主事件循环中执行,这意味着它们将被阻塞.

这意味着如果你的“工作”是IO绑定的,比如把东西放在数据库中那么你可能会因为没有使用dynos而逃脱.这当然取决于你计划一次进行多少事情.请记住,您在主应用程序中放置的任何任务都会从其他传入请求中获取资源.

通常不建议用于这样的事情,如果你有一个工作进行一些处理,它属于一个在自己的进程或线程中执行的队列.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐