【发布时间】:2015-09-08 16:11:48
【问题描述】:
我知道像 Rails 这样的“阻塞”服务器架构要求您将耗时的外部 API 调用卸载到工作进程(即作业队列),以防止它们阻塞服务器进程。
node.js 也是这样吗?或者它的“非阻塞”架构是否意味着它可以在不拒绝或减慢后续服务器请求的情况下进行不完整的外部 API 调用?
【问题讨论】:
标签: node.js http heroku express kue
我知道像 Rails 这样的“阻塞”服务器架构要求您将耗时的外部 API 调用卸载到工作进程(即作业队列),以防止它们阻塞服务器进程。
node.js 也是这样吗?或者它的“非阻塞”架构是否意味着它可以在不拒绝或减慢后续服务器请求的情况下进行不完整的外部 API 调用?
【问题讨论】:
标签: node.js http heroku express kue
node.js 的非阻塞特性和 node.js 中底层网络的实现不使用线程进行外部 API 调用,并且是这种访问类型的非常有效的实现。
node.js 也是这样吗?或者它的“非阻塞” 架构意味着它可以有不完整的外部 API 调用 在不拒绝或减慢后续服务器请求的情况下取得进展?
不,这不是 node.js 的情况。网络的非阻塞性质将为您处理此问题,而不会产生任何“减速”后果。
当然,每个打开的套接字都会消耗一些系统资源,并且 node.js 本身可能会对同时打开的套接字数量施加一些限制(我认为http 模块内置了限制可以配置),但这只是意味着您必须确保您不会因为打开许多未完成的套接字而变得疯狂,或者您必须根据您的情况仔细调整配置设置。
只是为了完成图片,node.js 中有一些类型的 I/O(例如文件 I/O)确实使用内部线程池,文件 I/O 的非阻塞性质通过以下方式实现实际的线程,尽管这对 node.js 程序员来说几乎是完全透明的。但是,node.js 中的网络不是以这种方式实现的(它使用实际的非阻塞套接字)。
【讨论】: