漫谈 Vercel Serverless 函数
我们需要明白什么是 Serverless。顾名思义,Serverless 并不是没有服务器,而是 “不需要你管理服务器”。就像你去超市买东西,不用自己去种菜、养鸡,直接挑选、付款就好。Vercel 的 Serverless 函数也是类似的,它帮你自动管理基础设施,你只需专注于编写处理逻辑,Vercel 会负责其余的部分。
Vercel 的 Serverless 函数的工作原理是,在你每次发出 HTTP 请求时被 动态启动,它就像你雇了一个“临时工”来处理你的请求,任务完成后他就离开了,不会一直待着。接下来,让我们一起看看它是如何工作的吧!
一、Vercel Serverless 函数的实现原理
1. 文件触发机制
在 Vercel 上,Serverless 函数的实现与文件结构密切相关。你只需要将你的代码放进一个叫 api
的文件夹中,Vercel 会自动将每个文件转化成一个可以处理 HTTP 请求的 API。
比如,你有一个项目结构如下:
/my-project/apihello.js
这里 hello.js
就是一个 Serverless 函数文件,当你访问 /api/hello
路径时,Vercel 就会触发这个函数来处理请求。
2. 按需执行
Vercel 的 Serverless 函数是按需执行的。也就是说,它只有在用户发出请求时才会被调用。当请求到达时,Vercel 会动态分配计算资源来处理请求,任务完成后,这些资源就会释放。
就像你去餐厅点餐,厨师只有在你点了菜后才会开始做饭,而做完了就不会再等着你,自己先休息一下去了。如果你再次点餐,厨师才会重新为你准备。
二、Vercel Serverless 函数是如何工作的?
在了解了基本概念后,我们来看看更详细的工作流程。这里的每个步骤都非常重要,帮助你理解它是如何高效工作的。
1. HTTP 请求触发函数
当你访问一个 API 路径时,比如 /api/hello
,Vercel 会首先触发对应的 Serverless 函数(比如 hello.js
)。
2. Vercel 启动计算实例
Vercel 会根据请求的类型(GET、POST等),动态启动一个 计算实例(就像启动一个微小的服务器)来执行你定义的函数。
3. 执行函数并返回结果
这个计算实例会运行你编写的代码,处理相关业务逻辑,并将结果返回给用户。这就好比你去餐厅点餐,厨师做完饭后将菜品端上来。
4. 实例销毁
当任务完成后,计算实例会自动销毁。也就是说,Vercel 会根据请求数量自动扩展或收缩计算资源,节省不必要的开销。
三、如何使用 Vercel 的 Serverless 函数?
步骤 1:创建项目
首先,创建一个项目并进入到你的项目文件夹:
mkdir my-vercel-project
cd my-vercel-project
步骤 2:创建 api
文件夹
在项目根目录下创建一个 api
文件夹,Vercel 会自动识别该目录下的文件并将它们转换为 API。
mkdir api
步骤 3:编写 Serverless 函数
在 api
文件夹下创建一个 JavaScript 文件,例如 hello.js
,并在里面编写处理请求的逻辑。代码非常简单:
// api/hello.js
module.exports = (req, res) => {res.status(200).json({ message: 'Hello from Vercel Serverless!' });
};
步骤 4:部署到 Vercel
你只需要将项目推送到 GitHub 或 GitLab,然后连接到 Vercel。Vercel 会自动检测到 api
文件夹中的文件,并将它们部署为 Serverless 函数。只要你推送代码,Vercel 就会立即构建并部署。
# 将代码推送到 GitHub
git add .
git commit -m "Add hello function"
git push origin main
接着,Vercel 会为你自动提供一个域名,你可以通过访问这个域名来调用 API,例如:
https://your-project-name.vercel.app/api/hello
。
四、代码示例:如何处理不同请求
你可以在 Serverless 函数中处理不同类型的请求,比如 GET、POST 等。下面是一个更复杂的示例,展示了如何处理不同的请求方式:
// api/hello.js
module.exports = (req, res) => {if (req.method === 'GET') {res.status(200).json({ message: 'Hello from Vercel (GET)' });} else if (req.method === 'POST') {const { name } = req.body;res.status(200).json({ message: `Hello, ${name}! (POST)` });} else {res.status(405).json({ error: 'Method Not Allowed' });}
};
- GET 请求:当你发送 GET 请求时,Vercel 返回一条简单的消息。
- POST 请求:当你发送 POST 请求时,Vercel 会接收请求体中的数据(例如用户名),并返回个性化的消息。
- 错误处理:如果你发送的是其他类型的请求(比如 PUT、DELETE),Vercel 会返回一个错误消息。
五、Vercel Serverless 函数的优缺点
优点:
- 无需管理服务器:你不需要配置或管理服务器,Vercel 会自动帮你处理。
- 按需付费:你只为实际使用的计算资源付费,不用担心空闲时间浪费。
- 自动扩展:当流量增加时,Vercel 会自动扩展计算资源,减少了运维的工作量。
- 快速部署:你只需推送代码到 GitHub,Vercel 会自动处理构建、部署等工作。
缺点:
- 冷启动:虽然函数的启动很快,但在低流量场景下,Vercel 可能会经历冷启动延迟。
- 有限的执行时间:每个函数的执行时间有限,如果函数运行时间过长,可能会被 Vercel 强制终止。
小结
Vercel 的 Serverless 函数 为开发者提供了一个 无服务器 的解决方案,可以让我们专注于业务逻辑的实现,而无需担心基础设施的管理。通过简单的目录结构和文件触发机制,Vercel 使得部署和扩展变得异常简单。而且它的按需扩展机制和按请求计费的方式,也让你能够更加高效地使用计算资源。
相关文章:
漫谈 Vercel Serverless 函数
我们需要明白什么是 Serverless。顾名思义,Serverless 并不是没有服务器,而是 “不需要你管理服务器”。就像你去超市买东西,不用自己去种菜、养鸡,直接挑选、付款就好。Vercel 的 Serverless 函数也是类似的,它帮你自…...

Nacos系列:Nacos 控制台手册
引言 Nacos是阿里巴巴中间件部门开源的一款用于服务发现和配置管理的产品,Nacos 控制台主要旨在于增强对于服务列表、健康状态管理、服务治理、分布式配置管理等方面的管控能力,以便进一步帮助用户降低管理微服务应用架构的成本。 一、访问 Nacos 控制台…...

react-dnd 拖拽事件与输入框的文本选中冲突
问题描述 当我们使用拖拽库的时候,往往会遇到拖拽的一个元素他的子孙元素有输入框类型的dom节点,当拖拽的事件绑定在该元素身上时候,发现子孙的输入框不能进行文本选中了,会按住鼠标去选中文本的时候会触发拖拽 实际的效果&…...
LeetCode:150. 逆波兰表达式求值
跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的! 代码随想录 LeetCode:150. 逆波兰表达式求值 给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表…...

python中向量指的是什么意思
一、向量是什么 在数学中,向量(也称为欧几里得向量、几何向量、矢量),指具有大小(magnitude)和方向的量。它可以形象化地表示为带箭头的线段。箭头所指:代表向量的方向;线段长度&am…...

7.Vue------$refs与$el详解 ------vue知识积累
$refs 与 $el是什么? 作用是什么? ref,$refs,$el ,三者之间的关系是什么? ref (给元素或者子组件注册引用信息) 就像你要给元素设置样式,就需要先给元素设定一个 class 一样,同理,…...

一个很好的直接网站操作的回测框架
1 网址 https://cn.tradingview.com/...

【电子元器件】贴片电阻的故障现象、故障原理和解决方法
本文章是笔者整理的备忘笔记。希望在帮助自己温习避免遗忘的同时,也能帮助其他需要参考的朋友。如有谬误,欢迎大家进行指正。 一、故障现象概要 贴片电阻与其他电子元器件相比,虽然属于比较不容易引发故障的零部件,但是在过载或…...

基于Spring Boot + Vue的摄影师分享交流社区的设计与实现
博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了多年的设计程序开发,开发过上千套设计程序,没有什么华丽的语言,只有实…...
SpringBoot项目监听端口接受数据(Netty版)
文章目录 前言服务端相关配置核心代码 客户端 前言 前言 环境: JDK:64位 Jdk1.8 SpringBoot:2.1.7.RELEASE Netty:4.1.39.Final 功能: 使用Netty监听端口接受客户端的数据,并发送数据给客户端。 服务端 …...

超标量处理器设计笔记(9) 重命名映射表、超标量处理器重命名中相关性问题
寄存器重命名 重命名映射表基于 SRAM 的重命名映射表 超标量处理器的寄存器重命名解决 RAW 相关性解决 WAW 相关性对写 RAT 进行检查(判断哪个 ARF 写入到 RAT)对写 ROB 进行检查(判断) 特殊指令处理方式 重命名映射表 重命名时…...
如何使用 Python 写入文本文件 ?
在Python编程中,写入文本文件是一项基本且重要的操作。 无论是生成日志文件、配置文件,还是进行数据输出,都需要用到这一技能。 下面,我将详细介绍如何使用Python写入文本文件,并提供一些实际开发中的建议和注意事项…...

07篇(附)--仿射变换矩阵
此篇献给某些 头铁 的小只因们,认真钻研下面的数学式吧 原理示例 首先我们以最简单的一个点的旋转为例子,且以最简单的情况举例,令旋转中心为坐标系中心O(0,0),假设有一点P0(x0,y0)࿰…...

KubeSphere搭建单节点RocketMQ
前提环境: Docker环境 Harbor仓库(可选) 参考官方文档: 《Docker 部署 RocketMQ》 https://rocketmq.apache.org/zh/docs/quickStart/02quickstartWithDocker参考官方文档: 《RocketMQ Dashboard》 https://rocketmq.apache.org/zh/docs/deploymentOperations/04Dashboard/ 声…...
深度学习中损失函数(loss function)介绍
深度学习中损失函数(loss function)介绍 在深度学习的宏伟城堡中,损失函数扮演着国王的角色,它决定了模型训练的方向和目标。损失函数,也被称为代价函数,是衡量模型预测与实际结果之间差异的函数。在深度学习的训练过程中&…...

Vue3+Node中使用webrtc推流至mediamtx
前言 项目的 Web 端是 Vue3 框架,后端是 GO 框架。需要实现将客户端的本地摄像头媒体流推送至服务端,而我自己从未有媒体流相关经验,最初 leader 让我尝试通过 RTSP 协议推拉流,我的思路就局限在了 RTSP 方向。 最初使用的服务端…...

React 内置的Hook学习
useState:管理组件状态 useState 是一个用于在函数组件中添加状态的 Hook。它允许你在函数组件中声明一个状态变量,并提供一个更新该状态的方法,其中与组件生命周期的关系: 初始化:当组件首次渲染时,useS…...

Flutter Navigator2.0的原理和Web端实践
01 背景与动机 在Navigator 2.0推出之前,Flutter主要通过Navigator 1.0和其提供的 API(如push(), pop(), pushNamed()等)来管理页面路由。然而,Navigator 1.0存在一些局限性,如难以实现复杂的页面操作(如移…...

初次使用uniapp编译到微信小程序编辑器页面空白,真机预览有内容
uniapp微信小程序页面结构 首页页面代码 微信小程序模拟器 模拟器页面为空白时查了下,有几个说是“Hbuilder编译的时候应该编译出来一个app.js文件 但是却编译出了App.js”,但是我的小程序结构没问题,并且真机预览没有问题 真机调试 根据defi…...

【HF设计模式】03-装饰者模式
声明:仅为个人学习总结,还请批判性查看,如有不同观点,欢迎交流。 摘要 《Head First设计模式》第3章笔记:结合示例应用和代码,介绍装饰者模式,包括遇到的问题、遵循的 OO 原则、达到的效果。 …...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
【位运算】消失的两个数字(hard)
消失的两个数字(hard) 题⽬描述:解法(位运算):Java 算法代码:更简便代码 题⽬链接:⾯试题 17.19. 消失的两个数字 题⽬描述: 给定⼀个数组,包含从 1 到 N 所有…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...

[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...