如果我有一个运行 Node.js 的 Web 服务器,那么我是否能够同时处理多个请求?从我的初步测试中我可以看出,主要是单线程的 Node 目前只能处理一个 HTTP 请求。但是,如果一个请求需要很长时间才能完成(例如,上传大量数据),那么所有其他请求都必须等待。
这种情况有解决办法吗?我们能否编写可以同时处理多个 HTTP 请求的代码?
最佳答案
Node 是单线程的这一事实并不一定意味着它一次只能处理 1 个请求。
Node 中的很多事物 都是故意异步的;例如许多文件系统操作、数据库查询等。这是以下人员的心态:
I know you're going to take some time to do this, so call me when you're done and in the meantime I'm going to put my single-thread of operation to some better use, rather than waiting for you to complete.
其他工作(可以是其他请求)就是在那个时候被处理的。当然,如果他们然后必须执行异步操作,操作流程可能会返回到我们之前暂停的地方,因为另一个操作已经完成。
在您进行大量上传的情况下,传入的流是异步处理的,并通过 data
event 进行管理。 .如果你想将这个流写入磁盘,同样,writing can be performed asynchronously ;即在文件上传过程中有一些点可以处理其他请求。
只有拥有多个 CPU 内核时,拥有多个操作线程才有用;那么每个操作线程都可以在不同的内核上运行。为此,Node 有 cluster
module ,你应该看看。
关于javascript - Node.js Web 服务器中的并行请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15191248/