我想为移动应用程序创建REST API。 我想尝试GCP函数,看看它是否可以满足我的需求。 现在我遇到了一些问题。我想我误会了一些东西。
当我使用firebase-tools在本地尝试某个函数时,每次对函数实例的请求都将重新创建服务器。我以为该实例会使我的服务器保持一段时间。
我知道每个实例一次只能处理一个请求。但是我担心每次请求都浪费大量时间来重新创建服务器。
我确定我的理解有误。
我只想知道如何充分利用它。
谢谢:)
这是我的Nestjs服务器的主要功能
import { NestFactory } from '@nestjs/core'
import { AppModule } from './module'
import { loggerMiddleware } from './middlewares/logger.middleware'
import { ExpressAdapter } from '@nestjs/platform-express'
import * as functions from 'firebase-functions'
import * as express from 'express'
const server: express.Application = express()
export async function createNestServer(server) {
const app = await NestFactory.create(AppModule, new ExpressAdapter(server))
app.use(loggerMiddleware)
return app.init()
}
createNestServer(server)
.then(() => console.log('Nest ok..'))
.catch(error => console.log('Nest broken', error))
export const api = functions.https.onRequest(server)
编辑:
Screenshot of the initialization logs when a request comes in the GCP function instance
如您所见,该函数在NestJS服务器初始化结束之前结束。每次我对此URL发出请求时,它都会进行初始化。即使NestJS服务器已启动,它也不会保持下次调用的状态。
答案 0 :(得分:0)
如果您的函数执行时间很长,那么只要没有现有实例空闲并准备接受连接,Cloud Functions就会启动一个新实例。最终,当您的函数完成时,处理该函数的实例将变为空闲状态。
在代码的全局范围内运行的代码将作为第一个传入请求的一部分执行。无论如何,它都不是“免费的”。
对于HTTP类型的连接,并发访问限制基于功能所需的带宽,而不是其计算时间。只要愿意支付每个实例的成本,您就可以使数百个实例同时在运行时间更长的函数上运行。