gpt4 book ai didi

node.js - 在运行在 node.js 上的 HTTP 服务器中,一个连接如何只用一个小空间来表示?

转载 作者:搜寻专家 更新时间:2023-11-01 00:46:54 24 4
gpt4 key购买 nike

我读到在 node.js 中创建的 HTTP 服务器不会为每个传入连接(请求)创建新线程。相反,它执行一个函数,该函数已注册为与接收请求事件相对应的回调。

据说每个连接都由堆中的一些小空间表示。我想不通。连接不是由套接字表示的吗?是否应该为与 node.js 服务器建立的每个连接打开套接字,这意味着每个连接不能仅由 javascript 堆中的空间分配表示?

最佳答案

在 nodejs.org 网站上描述的是,服务器使用 select()、epoll、kqueue 或/dev/poll 来等待每个连接,而不是生成线程(每个线程 2mb 开销!)读/写。正是这种方法允许 Node 避免每个连接产生线程,并且开销是与连接的套接字描述符的堆分配相关的开销。这个实现细节在很大程度上对开发人员是隐藏的,而运行时公开的 net.socket API 提供了利用该功能所需的一切,甚至无需考虑它。

Node 还通过 events.EventEmitter 公开了自己的事件 API。许多 Node 对象实现事件以提供异步(非阻塞)事件通知,这非常适合 I/O 操作,而在其他语言(例如 PHP)中,默认情况下是同步(阻塞)的。在 Node net.socket API 的情况下,会为处理套接字 I/O 的几个 API 方法触发事件,并且在事件发生时触发通过参数传递给这些方法的回调。事件可以通过多种不同的方式绑定(bind)回调函数,接受回调函数作为参数只是为了方便开发人员。

最后,不要混淆 OS 事件和 nodejs 事件。在 net API 的情况下,OS 事件被传递到 nodejs 运行时,但 nodejs 事件是 javascript。

希望对您有所帮助。

关于node.js - 在运行在 node.js 上的 HTTP 服务器中,一个连接如何只用一个小空间来表示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7606941/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com