假设我已经创建了下一个具有API路由的应用程序.假设两个用户向该API发送请求,要求将文件上传到S3存储桶,那么我的后台将对该文件进行一些处理,这可能需要2分钟以上的时间.这是怎么处理的?如何确保用户得到自己的处理过的文件,而不是彼此的?那么,假设该API只使用一台服务器提供服务,那么从本质上讲,它如何为多个用户提供服务呢?

是否有内置的消息队列对请求进行排队以进行处理,并使用http标头返回适当的响应?

推荐答案

Next.js本身没有内置的消息队列.

Next API只是一个node.js服务器.因此,您的问题可能会被问到"Node.js如何处理多个并发请求?"

Js使用带有事件循环的单线程.通过这种方式, node 可以处理数千个并发连接.

From here

node 采用了一种略有不同的方法来处理多个 如果您将其与其他一些 流行的服务器,如apache . for each 请求派生一个新线程是 很贵的.此外,线程在等待其他线程时不会执行任何操作 操作的结果(即:数据库读取).

这种方法有很多优点.不需要额外费用 创建新的线程.此外,您的代码更容易推理, 因为您不必担心如果两个线程 访问相同的变量.这是因为这根本不可能发生. 它也有一些缺点. node 不是最佳 Select 主要处理CPU密集型计算的应用程序.论 另一方面,它擅长处理多个I/O请求.

在Web应用程序环境中,文件上载被视为I/O(输入/输出)操作.当用户通过Web界面上传文件时,服务器必须从客户端设备(输入)读取数据,然后将其写入存储位置(输出).从客户端读取和写入存储都是I/O操作.

简而言之,异步代码首先被注册.事件循环持续判断已注册的异步操作的状态.它管理事件队列及其关联的回调函数.当异步操作完成时,它会被推送到事件循环的队列中.当主线程变得可用时,事件循环安排在主线程上执行相关联的回调函数.

Node.js相关问答推荐

在child_Process中持久运行SSH命令

使用NodeJS输出检索Base64图像的网络报废

如何在MEVN堆栈中结合创建和更新表单流程?

请求正文未定义

一个函数中的两个依赖的NodeJS数据库操作.如果第二个失败了怎么办?

我收到警告:发现函数rs-ms-v1不受支持的运行时nodejs18.x× 不受支持的运行时

在生产环境中,Nest实例启动时抛出不完整的导入错误

如何在没有 Typescript 的情况下以交互方式使用 Create-React-App?

多字段传递获取查询失败

当我try 从本地主机发布新产品时收到错误消息

在 Atlas 触发器(Node JS)中正确初始化 Firebase 管理 SDK

BrowserRouter工作时为什么HashRouter不工作?

来自 child_process.exec 的错误没有这样的设备或地址,管道有帮助.为什么?

如何使用 Puppeteer 从输入中删除现有文本?

为什么 JavaScript 的 parseInt(0.0000005) 打印5?

分块 WebSocket 传输

npm publish 导致'错误:EPERM:不允许操作,取消链接...',errno -4048

通过 POST 请求将数据从 node.js 服务器发送到 node.js 服务器

大型项目的 NodeJS vs Play 框架

Google Firebase 错误(函数返回未定义、预期的 Promise 或值)