这个问题涉及围绕 tcp/ip 协议的一般概念,So 上已经有很好的答案,但我希望能够深入了解 node.js http/net 库的特殊性。
节点 http 服务器实例允许为两种类型的事件注册回调,“请求”事件和“连接”事件。后者是从 net 库继承的,还有一个字段“_connections”,它计算服务器当前拥有的并发连接数。
现在,在我看来,由于 http 是一个无状态协议,请求和连接事件之间应该有 1-1 的对应关系——但事实并非如此。在我的调试器中单步执行一个简单的“hello-world”服务器时,我看到请求事件的数量超过了连接事件的数量。我还看到,即使没有对服务器进行调用(并且进程没有暂停),.connections 字段也永远不会归零。为什么请求数不等于连接数,为什么服务器会在最终调用 response.end() 后保持连接打开(当应该刷新响应缓冲区并且连接结束时?)。
此外,http 服务器的并发连接数(不使用 keep-alive 做任何事情)怎么会高于 1?请求基本上不会在套接字上排队并一一处理吗?我知道 Node 是异步的,但我也认为它以单线程方式运行。
提前致谢!