繁体   English   中英

node.js和require模块-它如何工作?

[英]node.js and require module - how it works?

我用使用一些require var的node.js构建服务器。

例如,我有server.js一个var的server.js文件: var s3 = require('s3')

另外, server.js包含一些带有回调的函数。 例如:

app.post('upload', function (req, res){
   s3.upload(req.path);
}

app.post('delete', function (req, res){
   s3.delete(req.path);
}

据我所知,应用程序将异步运行请求。

我的问题是关于s3的:因为我只有一个s3对象(由require定义),它将限制node.js的异步和并发性。 例如,服务器从不同的客户端获取10个请求。 它可以服务所有对象,但将受到所有请求共有的s3对象的限制。

这是node.js的工作方式? 我应该定义s3对象的集合吗?

没有理由定义多个s3对象。 由于节点实际上是单线程的,因此您不会从中得到任何好处-无论如何一次只能执行一条指令。

让我们看看如何实现假设的s3.method (假设s3指的是亚马逊s3):

  1. 您的代码调用s3.method
  2. s3.method然后在本地进行一些计算
  3. s3.method发送一个请求并等待响应(或执行某种其他形式的输入输出)。
  4. 您的代码处理响应。

与3相比,1,2和4是相对较快的操作(除非您在1,2或4中做了一些繁重的工作,但假设情况并非如此)。

因此,节点在执行操作3时所执行的操作是在等待响应的同时将控制权交给代码的其他部分。 该等待由节点运行时和OS级事件系统处理。 当响应到达时,将其处理程序排队等待执行,并在控制权让其返回节点运行时后立即执行,这是队列中的第一个。

s3不必等待动作完成:这是node.js中开始运行某些东西并提供回调的通用方法,当命令完成时将调用该回调。 主要是为了优化I / O动作并针对使用应用程序的低CPU而优化。

Nodejs主(事件)循环在单个线程中运行。

这意味着您编写的几乎所有代码一次都可以执行。 Nodejs对于“慢速”功能(例如(但不限于!)数据库调用或其他IO操作(例如文件操作))是异步的。

因此,一次只处理一个上传和删除请求,并且只需要一个s3对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM