怎样才能在node.js上运行的HTTP服务器中只有一小块空间来表示连接?

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

据说每个连接都是由堆中的一些小空间来表示的。 我无法弄清楚这一点。 连接是否由套接字表示? 是否应该打开每个连接到node.js服务器的套接字,这意味着每个连接不能仅由JavaScript堆中的空间分配来表示?

在nodejs.org网站上描述的是,服务器使用select(),epoll,kqueue或/ dev / poll来等待一个套接字准备好读/写,而不是产生线程(每个线程2mb开销) 。 正是这种方法允许节点避免每个连接的线程产生,并且开销是与连接的套接字描述符的堆分配相关联的。 这个实现细节在很大程度上是隐藏在开发人员面前的,运行时暴露的net.socket API提供了所有你需要利用这个特性的东西,甚至不需要考虑它。

Node也通过events.EventEmitter公开自己的事件API。 许多节点对象实现事件以提供asynchronous(非阻塞)事件通知,这对于I / O操作是完美的,在其他语言(如PHP)中,默认情况下它们是同步的(阻塞)。 在节点net.socket API的情况下,会触发处理套接字I / O的多个API方法的事件,并且在事件发生时触发parameter passing给这些方法的callback。 事件可以以各种不同的方式绑定到它们的callback函数,接受callback函数作为参数只是开发人员的方便。

最后,不要将OS事件与nodejs事件混淆。 在networkingAPI的情况下,OS事件传递给nodejs运行时,但nodejs事件是javascript。

我希望这有帮助。