这个问题涉及到TCP/IP协议的一般概念,对于这些概念,So上已经有了很好的回答,但我希望了解特定于node.js http/net库的细节。
一个节点http服务器实例允许为两种类型的事件注册回调函数,“请求”事件和“连接”事件。后者是从net库继承而来的,连同一个字段“_connections”,该字段计算服务器当前拥有的并发连接数。
现在,我认为由于http是一种无状态协议,应该存在请求和连接事件之间的一一对应关系--但事实并非如此。当我在调试器中执行一个简单的“hello-world”服务器时,我看到请求事件的数量多于连接事件。我还看到,即使没有任何调用被作用于服务器(而进程未暂停),.connections字段也永远不会归零。为什么请求数量不等于连接数量,为什么服务器保持连接开放,直到最后一次响应结束(响应缓冲区被清除并关闭连接)?
另外,一个不使用keep-alive的http服务器的并发连接数怎么可能超过1?请求基本上是在套接字上排队并逐个处理的吗?我知道Node是异步的,但我也认为它以单线程方式运行。
提前感谢!
一个节点http服务器实例允许为两种类型的事件注册回调函数,“请求”事件和“连接”事件。后者是从net库继承而来的,连同一个字段“_connections”,该字段计算服务器当前拥有的并发连接数。
现在,我认为由于http是一种无状态协议,应该存在请求和连接事件之间的一一对应关系--但事实并非如此。当我在调试器中执行一个简单的“hello-world”服务器时,我看到请求事件的数量多于连接事件。我还看到,即使没有任何调用被作用于服务器(而进程未暂停),.connections字段也永远不会归零。为什么请求数量不等于连接数量,为什么服务器保持连接开放,直到最后一次响应结束(响应缓冲区被清除并关闭连接)?
另外,一个不使用keep-alive的http服务器的并发连接数怎么可能超过1?请求基本上是在套接字上排队并逐个处理的吗?我知道Node是异步的,但我也认为它以单线程方式运行。
提前感谢!