首先,Node.js 不是多线程的。这个很重要。你必须是一个非常有才华的程序员才能设计出在线程环境中完美运行的程序。线程很难。
你必须是神才能维护一个设计不正确的线程项目。在非常大的项目中,有很多问题是难以避免的。
其次,整个平台被设计为异步运行。您是否见过任何 ASP.NET 项目,其中每个 IO 交互都是异步的?简而言之,ASP.NET 并不是为事件驱动而设计的。
然后,由于每个开放连接有一个线程以及整个扩展问题,因此存在内存占用。如果我错了,请纠正我,但我不知道如何避免为 ASP.NET 中的每个连接创建一个新线程。
另一个问题是 Node.js 请求在未使用或等待 IO 时处于空闲状态。另一方面,C# 线程休眠。现在,这些线程可以休眠的数量是有限制的。在 Node.js 中,您可以轻松地在一台开发机器上同时处理 10k 个客户端。您尝试在一台开发机器上并行处理 10k 个线程。
JavaScript 本身作为一种语言使异步编码更容易。如果您仍在使用 C# 2.0,那么异步语法真的很痛苦。如果您在各处定义并使用回调,Action<>
许多开发人员会感到困惑。Function<>
以事件方式编写的 ASP.NET 项目只是普通 ASP.NET 开发人员无法维护。
至于线程和内核。Node.js 是单线程的,并通过创建多节点进程进行扩展。如果您有 16 个核心,那么您运行 16 个 node.js 服务器实例,并在其前面有一个 Node.js 负载均衡器。(如果你愿意,也许是一个 nginx 负载均衡器)。
这些都是从一开始就以非常低的级别写入平台的。这不是后来添加的一些功能。
其他优势
Node.js 比上面还有很多。以上只是为什么 Node.js 处理事件循环的方式比在 ASP.NET 中使用异步功能更好的原因。
- 表现。它很快。真快。
- Node.js 的一大优势是它的低级 API。你有很多控制权。
- 您将整个 HTTP 服务器直接集成到您的代码中,然后外包给 IIS。
- 你有整个 nginx 与 Apache 的比较。
- 整个 C10K 挑战由节点很好地处理,但不是由 IIS
- AJAX 和 JSON 通信让人感觉自然而轻松。
- 实时通信是 Node.js 的一大优点。它是为此而生的。
- 与基于文档的 nosql 数据库配合得很好。
- 也可以运行 TCP 服务器。可以进行文件写入访问,可以在服务器上运行任何 unix 控制台命令。
- 例如,您可以使用 CouchDB 和 map/reduce 在 javascript 中查询数据库。你用 JavaScript 编写你的客户端。在您的 Web 堆栈上开发时没有上下文切换。
- 丰富的社区驱动的开源模块。node.js 中的所有内容都是开源的。
- 占用空间小,几乎没有依赖关系。您可以自己构建 node.js 源代码。
Node.js 的缺点
这个很难(硬。它很年轻。作为一名熟练的JavaScript 开发人员,我在用 Node.js 编写网站时遇到了困难,因为它的低级性质和我拥有的控制级别。感觉就像 C 语言一样。有很大的灵活性和力量,可以为我使用或吊死我。
API 未冻结。它正在迅速变化。我可以想象必须在 5 年内完全重写一个大型网站,因为届时 Node.js 将发生变化。这是可行的,你只需要知道 node.js 网站的维护并不便宜。
进一步阅读
http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/
http://blip.tv/file/2899135
http://nodeguide.com/