node.js - nodejs - 为什么 Node.js 可以处理大量并发持久连接?

标签 node.js networking tcp

我知道 Node.js 擅长保持大量同时持续的连接,例如,一个聊天室供许多聊天者使用。

我想知道它是如何实现的。我的意思是无论如何它都使用由底层操作系统封装的 TCP/IP,为什么它可以很好地处理持久连接而其他人不能?

它有什么神奇之处?

最佳答案

Node.js 使所有 I/O 异步。它仅在单线程中运行,但会在等待 I/O 的同时执行其他请求或操作。

相比之下,传统的网络服务器在前一个请求完全完成之前不会为另一个请求提供服务。因此,Apache 同时运行多个进程;假设有 10 个 httpd 进程,这通常意味着可以同时处理 10 个请求 (*)。如果流程需要更多时间才能完成,您将提供更少的请求 - 或者将不得不产生更多流程,即使流程什么都不做 - 例如等待数据库消化并返回数据。

一个 node.js 进程,面对一个将转到数据库的请求,让数据库继续工作,同时它去服务另一个请求。

*) MPM 使这不是完全正确,但对于所有意图和目的来说已经足够正确了。

关于node.js - nodejs - 为什么 Node.js 可以处理大量并发持久连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10563278/

相关文章:

linux - 不使用 sudo 将数据发送到 Linux tap 接口(interface)

c++ - 如何在没有监听器的情况下创建 TCP 连接?

c++ - 在 Visual C++ 中通过 TCP 发送字符串数据

node.js - 保持 Node 在后台运行的最佳方法是什么——nohup vs. forever vs. pm2?

node.js - 使用 Azure Node SDK 获取应用程序设置

php - 如何确保您的 PHP 脚本仅由您授权的应用程序调用?

networking - 如何在linux中配置网桥连接

node.js - 自动刷新 firebase 身份验证而不重新加载窗口?

node.js - Discord Bot,为什么它保持离线状态? [小白]

c - 错误 *** 没有名为 *** 的成员