我了解 Node.js 如何与单线程一起工作。大多数情况下,它使用异步方法/模块,以尽可能保持主运行时线程的自由。
但是,内部的一些异步模块正在使用线程来完成其工作。例如,读取文件或其他密集型 CPU 任务。这是在后台完成的,并且是为 Node 开发人员抽象的。
我的问题是,内部 Socket.IO 如何工作,它是否使用像上面示例这样的线程?它是否为每个连接使用单独的线程?如果是这样,这是否意味着如果我们有 1000 个连接的客户端,我们将有 1000 个线程?
Node 不使用线程池(或单独的线程)作为套接字,而是使用任何特定于平台的机制来轮询主线程上的套接字以获取数据(例如 Linux 上的 epoll、OS X (IIRC) 上的 kqueue、Windows 上的 I/O 完成端口等)。
Socket.io 像大多数节点应用程序一样在事件循环中工作。没有棘手的线程业务 AFAIK。您可以在此处自行查看源代码:https://github.com/Automattic/socket.io