Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Heroku上,使用Node.js是否可以防止需要队列+;第三方API调用的工作动态节点?_Api_Node.js_Heroku_Background Process_Worker - Fatal编程技术网

在Heroku上,使用Node.js是否可以防止需要队列+;第三方API调用的工作动态节点?

在Heroku上,使用Node.js是否可以防止需要队列+;第三方API调用的工作动态节点?,api,node.js,heroku,background-process,worker,Api,Node.js,Heroku,Background Process,Worker,Heroku Dev Center on指出,您需要使用worker+队列来处理API调用,例如获取RSS提要,因为如果服务器速度较慢,则此操作可能需要一些时间,并且在web dyno上执行此操作将导致其无法接收其他请求 然而,从我所读到的内容来看,Node.js的一个要点是,由于其基于异步事件的运行时模型,它在这些条件下不会受到阻塞的影响 我很困惑,因为这难道不意味着在web dynos中进行API调用(异步)是可以的吗?也许这些文档更多地是为Ruby/Python/etc用例编写的,在这些用

Heroku Dev Center on指出,您需要使用worker+队列来处理API调用,例如获取RSS提要,因为如果服务器速度较慢,则此操作可能需要一些时间,并且在web dyno上执行此操作将导致其无法接收其他请求

然而,从我所读到的内容来看,Node.js的一个要点是,由于其基于异步事件的运行时模型,它在这些条件下不会受到阻塞的影响


我很困惑,因为这难道不意味着在web dynos中进行API调用(异步)是可以的吗?也许这些文档更多地是为Ruby/Python/etc用例编写的,在这些用例中,同步模型更为普遍

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

关于NodeJS的一个常见误解是,它是一个允许您同时做很多事情的系统。情况并非如此,它允许您在等待IO绑定任务时执行其他操作,一次最多可执行5项

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

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


一般来说,不建议这样做,如果您有一个进行某些处理的作业,那么它属于在其自己的进程或线程中执行的队列。

Thx了解有关5个反应器的信息。查询URL并等待响应怎么样?问题特别涉及第三方API调用。这是否意味着您一次只能有5个等待响应?是的,这是正确的。如果您正在等待5个api调用,则在其中一个api调用完成之前,它不会尝试连接到第6个api调用。它也不会处理任何入站请求、写入任何文件、控制台、数据库或任何其他IO绑定任务?还有这篇论坛帖子“你将如何为100k同步服务器提供服务…”。他们谈论的是一个Node.js进程。我遗漏了什么吗?我并不是想让人们认为节点只能处理5个连接。事实并非如此,节点可以处理与服务器具有句柄数量相同的连接。反应堆用于IO等待,这意味着实际发送数据并等待响应。在长轮询情况下,即使连接已打开,也不总是发送数据(或等待)。