假设我已经创建了下一个具有API路由的应用程序.假设两个用户向该API发送请求,要求将文件上传到S3存储桶,那么我的后台将对该文件进行一些处理,这可能需要2分钟以上的时间.这是怎么处理的?如何确保用户得到自己的处理过的文件,而不是彼此的?那么,假设该API只使用一台服务器提供服务,那么从本质上讲,它如何为多个用户提供服务呢?
是否有内置的消息队列对请求进行排队以进行处理,并使用http标头返回适当的响应?
假设我已经创建了下一个具有API路由的应用程序.假设两个用户向该API发送请求,要求将文件上传到S3存储桶,那么我的后台将对该文件进行一些处理,这可能需要2分钟以上的时间.这是怎么处理的?如何确保用户得到自己的处理过的文件,而不是彼此的?那么,假设该API只使用一台服务器提供服务,那么从本质上讲,它如何为多个用户提供服务呢?
是否有内置的消息队列对请求进行排队以进行处理,并使用http标头返回适当的响应?
Next.js本身没有内置的消息队列.
Next API只是一个node.js服务器.因此,您的问题可能会被问到"Node.js如何处理多个并发请求?"
Js使用带有事件循环的单线程.通过这种方式, node 可以处理数千个并发连接.
node 采用了一种略有不同的方法来处理多个 如果您将其与其他一些 流行的服务器,如apache . for each 请求派生一个新线程是 很贵的.此外,线程在等待其他线程时不会执行任何操作 操作的结果(即:数据库读取).
这种方法有很多优点.不需要额外费用 创建新的线程.此外,您的代码更容易推理, 因为您不必担心如果两个线程 访问相同的变量.这是因为这根本不可能发生. 它也有一些缺点. node 不是最佳 Select 主要处理CPU密集型计算的应用程序.论 另一方面,它擅长处理多个I/O请求.
在Web应用程序环境中,文件上载被视为I/O(输入/输出)操作.当用户通过Web界面上传文件时,服务器必须从客户端设备(输入)读取数据,然后将其写入存储位置(输出).从客户端读取和写入存储都是I/O操作.
简而言之,异步代码首先被注册.事件循环持续判断已注册的异步操作的状态.它管理事件队列及其关联的回调函数.当异步操作完成时,它会被推送到事件循环的队列中.当主线程变得可用时,事件循环安排在主线程上执行相关联的回调函数.