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

在node.js上运行的HTTP服务器中,连接如何仅由一个小空间表示?,node.js,httpserver,Node.js,Httpserver,我读到node.js中创建的HTTP服务器不会为每个传入连接(请求)创建新线程。相反,它执行一个已注册为回调的函数,该回调对应于接收请求的事件 据说每个连接都由堆中的一些小空间表示。我想不出来。连接是否不由套接字表示?是否不应该为node.js服务器的每个连接打开套接字,这意味着每个连接不能仅通过javascript堆中的空间分配来表示 nodejs.org网站上描述,服务器使用select()、epoll、kqueue或/dev/poll等待套接字准备好读/写,而不是在每个连接上生成线程(每个

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


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

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

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

最后,不要将OS事件与nodejs事件混淆。对于NetAPI,操作系统事件被传递到nodejs运行时,但nodejs事件是javascript

我希望这有帮助