当前位置: 首页 > news >正文

使用 frp 实现内网穿透:从基础到进阶

在日常开发中,我们经常会遇到需要将本地服务暴露给外部用户的情况,比如测试同学需要临时测试一个本地开发的 Web 服务,或者希望在出差时远程访问家里的 NAS。这些需求的核心问题都是如何实现内网穿透。

一、为什么选择 frp?

经过对多种工具的尝试,我最终选择了 GitHub 上拥有 93.8k Star 的开源项目 frp。frp 不仅支持全协议,包括 TCP、UDP、HTTP/HTTPS,还通过 P2P 减少服务器中转开销,最重要的是,它是完全开源的,配置灵活,可以根据需求自由调整。接下来,我将从开发者的实用角度出发,带你从零开始掌握 frp 的核心用法。

内网穿透的典型场景包括:

  1. 本地 Web 服务测试:当你在本地开发了一个 Spring Boot API 服务(端口 8080),需要让身在异地的客户临时测试,但你的设备可能处于运营商 NAT 后或防火墙限制下,无法直接通过公网访问。
  2. 远程访问 NAS:你有一台放置在家里的 NAS,存储了照片和文档,但出差时希望通过公网访问这些文件,同样面临没有公网 IP 或防火墙限制的问题。

传统解决方案包括:

  1. 申请公网 IP:成本较高,部分运营商不提供动态公网 IP 地址,需要使用动态 DNS(DDNS)来维护 IP 地址的变更。
  2. 第三方穿透工具:如 Ngrok(免费版功能受限)、花生壳(收费且流量费用高),关键问题是数据需要经过第三方服务器,安全性存疑。

frp(Fast Reverse Proxy)作为反向代理工具,通过“服务端 + 客户端”模式完美解决了上述问题,并具备以下核心优势:

  • 完全开源:代码透明,用户可根据需要自行修改和扩展。
  • 协议全面:支持 TCP(如 SSH、数据库)、UDP(如游戏联机)、HTTP/HTTPS(Web 服务)等协议。
  • 功能灵活:支持端口复用、负载均衡、P2P 直连(减少服务器流量)、加密压缩(TLS/SSL)等。
  • 轻量高效:服务端仅需一个二进制文件,资源占用极低,实测 1 核 1G 的云服务器可支撑数百连接。
二、快速上手:5 分钟实现本地服务公网访问
  1. 准备工作

    • 一台公网服务器(如阿里云、腾讯云),用于部署 frp 服务端(frps)。
    • 本地电脑(或内网设备),用于部署 frp 客户端(frpc)。
    • 从 frp Releases 页面下载对应系统的二进制包(如 Linux 选 frp_0.51.3_linux_amd64.tar.gz)。
    Windows:https://github.com/fatedier/frp/releases/download/v0.57.0/frp_0.57.0_windows_amd64.zipLinux:https://github.com/fatedier/frp/releases/download/v0.57.0/frp_0.57.0_linux_amd64.tar.gz
    # 或者
    wget https://github.com/fatedier/frp/releases/download/v0.59.0/frp_0.59.0_linux_amd64.tar.gzmwget https://github.com/fatedier/frp/releases/download/v0.59.0/frp_0.59.0_linux_amd64.tar.gz
  2. 服务端配置(公网服务器)

    • 解压后,服务端核心配置文件是 frps.toml

    • 以 TCP 代理为例,配置一个基础服务端:

    # frps.toml
    bindPort = 7000  # frp服务端与客户端通信的端口(必选)
    vhostHTTPPort = 8080  # HTTP虚拟主机端口(可选,用于暴露Web服务)
    vhostHTTPSPort = 8443  # HTTPS虚拟主机端口(可选)
    
    • 启动服务端:
    ./frps -c ./frps.toml
    
  3. 客户端配置(本地电脑)

    • 解压后,修改客户端配置文件 frpc.toml,将本地 8080 端口的 Web 服务暴露到公网。
    # frpc.toml
    serverAddr = "你的公网服务器IP"  # 必选,公网服务器IP
    serverPort = 7000  # 必选,与服务端bindPort一致[[proxies]]
    name = "web-demo"  # 代理名称(唯一标识)
    type = "http"  # 代理类型(http/https/tcp/udp/stcp等)
    localIP = "127.0.0.1"  # 本地服务IP(默认本机)
    localPort = 8080  # 本地服务端口(必选)
    customDomains = ["web.yourdomain.com"]  # 自定义域名(需解析到公网服务器IP)
    
    • 启动客户端:
    ./frpc -c ./frpc.toml
    

在这里插入图片描述

  1. 验证效果
    • 域名解析:将 web.yourdomain.com 的 A 记录指向公网服务器 IP。
    • 访问测试:在公网环境浏览器输入 http://web.yourdomain.com:8080,应能看到本地 Web 服务的内容。

输入地址(公网ip:端口号)可以查看服务端管理页面。
服务端显示注册了两个连接,一个tcp,一个http。
在这里插入图片描述
在这里插入图片描述

三、进阶玩法:全场景覆盖

除了基础的穿透功能,frp 还支持更复杂的场景:

  1. HTTPS 代理:当需要暴露生产环境的 Web 服务(如前端项目或 API 接口)时,HTTPS 是必需的。frp 支持直接配置 SSL 证书,步骤如下:

    • 准备证书:可通过 Let’s Encrypt 申请免费证书(fullchain.pemprivkey.pem),或自签名(参考 frp 文档的 TLS 配置)。
    • 服务端配置:
    # frps.toml
    vhostHTTPSPort = 443  # 常用HTTPS端口
    tlsOnly = true  # 强制使用TLS(可选)
    
    • 客户端配置:
    # frpc.toml
    [[proxies]]
    name = "web-https"
    type = "https"
    localPort = 8080
    customDomains = ["web.yourdomain.com"]
    # 若服务端已配置证书,客户端无需重复配置;否则需指定证书路径
    # tlsCertFile = "./fullchain.pem"
    # tlsKeyFile = "./privkey.pem"
    
  2. UDP 穿透:当需要实时通信(如游戏联机、视频流)时,使用 UDP 协议。frp 的 udp 类型代理可直接穿透:

    # frpc.toml
    [[proxies]]
    name = "game-server"
    type = "udp"
    localIP = "192.168.1.100"  # 内网网络服务器IP
    localPort = 27015  # 游戏服务端口
    remotePort = 27015  # 公网映射端口(需与服务端协商未被占用)
    
  3. 安全增强:frp 提供了多层安全防护:

    • 加密:配置 useEncryption = true,客户端与服务端通信加密(防中间人攻击)。
    • 压缩:配置 useCompression = true,减少传输流量(适合带宽有限场景)。
    • HTTP 基本认证:为 HTTP 代理添加用户名和密码,防止恶意访问:
    [[proxies]]
    name = "web-auth"
    type = "http"
    localPort = 8080
    httpUser = "admin"  # 用户名
    httpPwd = "123456"  # 密码
    
  4. P2P 直连:传统穿透模式中,所有流量都经过公网服务器中转,对于大流量场景(如视频流),服务器带宽成本较高。frp 的 stcp 模式支持 P2P 直连,流量直接在客户端和访问者之间传输,仅需服务器做握手协商:

    • 被穿透方(B)配置
    [[proxies]]
    name = "secret-ssh"
    type = "stcp"
    serverName = "secret-ssh"  # 与访问者协商的服务名
    secretKey = "abcdefg"  # 通信密钥(需与访问者一致)
    localPort = 22  # 本地SSH端口
    
    • 访问者(C)配置
    [[proxies]]
    name = "access-ssh"
    type = "stcp"
    role = "visitor"  # 标记为访问者
    serverName = "secret-ssh"  # 与被穿透方一致
    secretKey = "abcdefg"  # 密钥一致
    bindAddr = "127.0.0.1"  # 访问者本地绑定IP
    bindPort = 6000  # 访问者本地端口(通过ssh -p 6000 127.0.0.1访问)
    
四、实战场景:开发者最常用的 3 类需求
  1. 本地开发调试:当前端同学在开发 Vue/React 项目时,需要将本地 localhost:3000 暴露给测试或客户。使用 frp 的 HTTP 代理模式,只需:

    • 服务端开放 8080 端口。
    • 客户端配置 customDomains 为临时域名(如 dev.yourdomain.com)。
    • 测试人员直接访问 http://dev.yourdomain.com:8080 即可,无需安装任何工具。
  2. 远程运维:对于没有公网 IP 的内网服务器(如工厂里的工控机),可以通过 frp 的 TCP 代理暴露 SSH 端口(22)。运维人员通过公网服务器 IP + 映射端口(如 6000),即可远程登录:

    ssh -p 6000 user@公网服务器IP
    
  3. 家庭 NAS:家里的 NAS(如群晖)通常处于运营商 NAT 后,无法直接公网访问。通过 frp 将 NAS 的 5000(HTTP)和 5001(HTTPS)端口映射到公网,出差时可以通过 https://nas.yourdomain.com:5001 访问私有云,数据仅经自己的服务器中转,比第三方网盘更安全。

五、设置服务自启动

在 Linux 系统下,使用 systemd 可以方便地控制 frps 服务端的启动、停止、配置后台运行以及开机自启动。

以下是具体的操作步骤:

  1. 安装 systemd

    如果您的 Linux 服务器上尚未安装 systemd,可以使用包管理器如 yum(适用于 CentOS/RHEL)或 apt(适用于 Debian/Ubuntu)来安装它:

    # 使用 yum 安装 systemd(CentOS/RHEL)
    yum install systemd# 使用 apt 安装 systemd(Debian/Ubuntu)
    apt install systemd
    
  2. 创建 frps.service 文件

    使用文本编辑器(如 vim)在 /etc/systemd/system 目录下创建一个 frps.service 文件,用于配置 frps 服务。

    $ sudo vim /etc/systemd/system/frps.service
    
  3. 写入内容

    frps.service 文件中写入以下内容:

    [Unit]
    Description=frp service
    After=network.target[Service]
    Type=simple
    ExecStart=/home/ubuntu/frp_0.59.0_linux_amd64/frps -c /home/ubuntu/frp_0.59.0_linux_amd64/frps.toml
    KillSignal=SIGQUIT
    TimeoutStopSec=5
    Restart=on-failure
    RestartSec=5s
    KillMode=process
    PrivateTmp=true
    StandardOutput=syslog
    StandardError=inherit[Install]
    WantedBy=multi-user.target
    
  4. 使用 systemd 命令管理 frps 服务

    使用以下命令启动、停止、重启和查看 frps 服务的状态:

    # 启动frp
    sudo systemctl start frps# 停止frp
    sudo systemctl stop frps# 重启frp
    sudo systemctl restart frps# 查看frp状态
    sudo systemctl status frps
    
  5. 设置 frps 开机自启动

    使用以下命令设置 frps 服务开机自启动:

    sudo systemctl enable frps
    

总结

内网穿透是一种通过公共网络连接两个私有网络的技术,使得外部用户可以访问内部网络中的服务。frp 作为反向代理工具,凭借其全面的协议支持、灵活的配置选项、P2P 直连等功能,为开发者提供了便捷且安全的远程访问解决方案。通过本文,相信你已经掌握了 frp 的基础与进阶用法,可以更好地应对各种内网穿透需求。

frp 中文官网:https://gofrp.org/zh-cn/

frp 中文文档:https://gofrp.org/zh-cn/docs/

其他资源

使用frp实现内网穿透教程 https://blog.csdn.net/jichencsdn/article/details/138253143
frp实现内网穿透(一篇解决所有问题!) https://blog.csdn.net/weixin_44700323/article/details/140777393

相关文章:

使用 frp 实现内网穿透:从基础到进阶

在日常开发中,我们经常会遇到需要将本地服务暴露给外部用户的情况,比如测试同学需要临时测试一个本地开发的 Web 服务,或者希望在出差时远程访问家里的 NAS。这些需求的核心问题都是如何实现内网穿透。 一、为什么选择 frp? 经过…...

redis中key的过期和淘汰

一、过期(redis主动删除) 设置了ttl过期时间的key,在ttl时间到的时候redis会删除过期的key。但是redis是惰性过期。惰性过期:redis并不会立即删除过期的key,而是会在获取key的时候判断key是否过期,如果发现…...

鸿蒙OSUniApp制作多选框与单选框组件#三方框架 #Uniapp

使用UniApp制作多选框与单选框组件 前言 在移动端应用开发中,表单元素是用户交互的重要组成部分。尤其是多选框(Checkbox)和单选框(Radio),它们几乎存在于每一个需要用户做出选择的场景中。虽然UniApp提供…...

和为target问题汇总

文章目录 习题题型1377.组合总和 IV 题型2494.目标和 和为target的问题,可以有很多种问题的形式的考察,当然,及时的总结与回顾有利于我们熟练掌握这些知识! 题型1 爬楼梯问题,是对于转移步伐有规定,在不同…...

Ubuntu使用Docker搭建SonarQube企业版(含破解方法)

目录 Ubuntu使用Docker搭建SonarQube企业版(含破解方法)SonarQube介绍安装Docker安装PostgreSQL容器Docker安装SonarQube容器SonarQube汉化插件安装 破解生成license配置agent 使用 Ubuntu使用Docker搭建SonarQube企业版(含破解方法&#xff…...

牛客网 NC22167: 多组数据a+b

牛客网 NC22167: 多组数据ab 题目分析 这道题目来自牛客网(题号:NC22167),要求我们计算两个整数a和b的和。乍看简单,但有以下特殊点需要注意: 输入包含多组测试数据每组输入两个整数当两个整数都为0时表示…...

EdgeShard:通过协作边缘计算实现高效的 LLM 推理

(2024-05-23) EdgeShard: Efficient LLM Inference via Collaborative Edge Computing (EdgeShard:通过协作边缘计算实现高效的 LLM 推理) 作者: Mingjin Zhang; Jiannong Cao; Xiaoming Shen; Zeyang Cui;期刊: (发表日期: 2024-05-23)期刊分区:本地链接: Zhang 等 - 2024 …...

π0: A Vision-Language-Action Flow Model for General Robot Control

TL;DR 2024 年 Physical Intelligence 发布的 VLA 模型 π0,基于 transformer 流匹配(flow matching)架构,当前开源领域最强的 VLA 模型之一。 Paper name π0: A Vision-Language-Action Flow Model for General Robot Contr…...

RabbitMQ高级篇-MQ的可靠性

目录 MQ的可靠性 1.如何设置数据持久化 1.1.交换机持久化 1.2.队列持久化 1.3.消息持久化 2.消息持久化 队列持久化: 消息持久化: 3.非消息持久化 非持久化队列: 非持久化消息: 4.消息的存储机制 4.1持久化消息&…...

4、前后端联调文生文、文生图事件

4、前后端联调文生文、文生图事件 原文地址 1、底部【发送按钮】事件触发调用后端AI程序逻辑 <!-- 前端模板如下: --> <!DOCTYPE html> <html><head><meta charset"utf-8"><title>小薛博客LLM大模型实战</title><me…...

深度学习中的提示词优化:梯度下降全解析

深度学习中的提示词优化:梯度下降全解析 在您的代码中,提示词的更新方向是通过梯度下降算法确定的,这是深度学习中最基本的优化方法。 一、梯度下降与更新方向 1. 核心公式 对于可训练参数 θ \theta θ(这里是提示词嵌入向量),梯度下降的更新公式为:...

Midjourney 最佳创作思路与实战技巧深度解析【附提示词与学习资料包下载】

引言 在人工智能图像生成领域&#xff0c;Midjourney 凭借其强大的艺术表现力和灵活的创作模式&#xff0c;已成为设计师、艺术家和创意工作者的核心工具。作为 CSDN 博主 “小正太浩二”&#xff0c;我将结合多年实战经验&#xff0c;系统分享 Midjourney 的创作方法论&#x…...

【数字图像处理】半开卷复习提纲

1&#xff1a;要求 2张A4纸以内&#xff0c;正反面均可写 &#xff08;不过博主由于墨水浸到背面了&#xff0c;采用了把2张单面通过双面胶粘起来的方法&#xff0c;结果考前半个小时都在用这个难用的双面胶。。。&#xff09; 2&#xff1a;提纲内容 3&#xff1a;提示 考的…...

交通运输与能源融合发展——光储充在交通上的应用完整解决方案

在全球积极应对气候变化、推动可持续发展的大背景下&#xff0c;交通运输与能源领域的融合发展成为关键趋势。近日&#xff0c;交通运输部等十部门联合发布的《关于推动交通运输与能源融合发展的指导意见》&#xff0c;为这两个重要行业的协同前行指明了清晰的方向&#xff0c;…...

API 接口开放平台 Crabc 3.2 发布

2025 年 5 月 15 日&#xff0c;API 接口开放平台 Crabc 3.2 发布。 Crabc 是一款 API 接口开发平台、企业级接口管理和 SQL2API 平台。它支持动态数据源、动态 SQL 和标签&#xff0c;能接入多种 SQL 或 NoSQL 数据源&#xff0c;包括 MySQL、Oracle、达梦、TiDB、Hive、ES 和…...

基于智能推荐的就业平台的设计与实现(招聘系统)(SpringBoot Thymeleaf)+文档

&#x1f497;博主介绍&#x1f497;&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示&#xff1a;文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…...

【web应用】配置Java JDK与maven3的环境变量

文章目录 一、控制面板 - 系统 - 高级系统设置-环境变量二、用户变量和系统变量的配置方法一样&#xff1a;三、查看是否配置成功 maven有两种安装方式&#xff1a; 1、IDEA捆绑安装&#xff0c;一般是maven3【这里配置的环境变量是捆绑安装这种方式】 2、手动下载安装插件 一、…...

编程日志5.7

二叉树的功能代码 #include<iostream> using namespace std; //二叉树结点定义 template<typename T> struct TreeNode { T val;//定义了一个类型为T的成员变量val,用于存储树节点的值 TreeNode* left;//定义了一个指向TreeNode类型的指针成员变量left,…...

室内定位:热门研究方向与未解难题深度解析

I. 引言:对普适性室内定位的持续探索 A. 室内定位在现代应用中的重要性 室内定位系统(IPS)正迅速成为众多应用领域的基石技术,其重要性源于现代社会人们约70%至90%的时间在室内度过的事实 1。这些应用横跨多个行业,包括应急响应 1、智能建筑与智慧城市 6、医疗健康(如病…...

图片通过滑块小图切换大图放大镜效果显示

图片通过滑块小图切换大图放大镜效果显示 实现目标&#xff1a; 显示一组图片列表&#xff0c;鼠标进入小图记录当下小图下标&#xff0c;通过小图下标在数组中对应图片显示到大图位置&#xff1b; 鼠标进入大图位置时&#xff0c;带动滑块移动&#xff0c;并将放大两倍的大图…...

[250515] 腾讯推出 AI 编程助手 CodeBuddy,对标 Cursor

目录 腾讯推出 AI 编程助手 CodeBuddy 腾讯推出 AI 编程助手 CodeBuddy 腾讯发布 CodeBuddy&#xff0c;一款 AI 编程助手&#xff0c;旨在提升开发者效率。 主要亮点&#xff1a; CodeBuddy&#xff1a; 全新英文品牌&#xff0c;面向全球开发者。Craft 模式&#xff1a; A…...

OpenCV光流估计:原理、实现与应用

一、什么是光流&#xff1f; 光流(Optical Flow)是计算机视觉中描述图像序列中像素运动模式的重要概念。它表示图像中物体在连续帧之间的表观运动&#xff0c;是由物体或相机的运动引起的。 光流的基本假设 亮度恒常性&#xff1a;同一物体点在连续帧中的亮度保持不变时间持…...

使用 QGIS 插件 OpenTopography DEM Downloader 下载高程数据(申请key教程)

使用 QGIS 插件 OpenTopography DEM Downloader 下载高程数据 目录 使用 QGIS 插件 OpenTopography DEM Downloader 下载高程数据&#x1f4cc; 简介&#x1f6e0; 插件安装方法&#x1f30d; 下载 DEM 数据步骤&#x1f511; 注册 OpenTopography 账号&#xff08;如使用 Cope…...

PHP基础知识

【学习资料】 视频&#xff1a; https://www.bilibili.com/video/BV1Xh411S7G1?spm_id_from333.788.videopod.episodes&vd_sourcebe26b82da70367069ab00d6db4f4ffc0 文档&#xff1a;https://www.runoob.com/php/php-tutorial.html 目录 1&#xff0c;PHP是什么2&#xff…...

Kotlin 和 Java 混合开发时需要注意哪些问题

1 空安全&#xff08;Null Safety&#xff09; Kotlin 有严格的空安全机制&#xff08;如非空类型的 String 和可空类型 String?&#xff09;&#xff0c;但是 Java 没有&#xff1a; Kotlin 代码调用 Java 代码&#xff1a;Java 中的所有引用类型默认都是可空的&#xff0c…...

乘法口诀练习神器

请你利用python语言开发一个“乘法口诀练习神器”&#xff0c;主要辅助小学生练习乘法口诀&#xff0c;主要功能如下&#xff1a; 1. 能够随机循环出10道题&#xff0c;可以是乘法或者是除法。如果是乘法&#xff0c;确保两个因数都是1-9之间的整数&#xff1b;如果是除法&…...

How to configure Linux mint desktop

Backgrounds apt install mint-backgrounds-*Theme...

【golang】DNS 资源记录(RR)接口

Go 中 miekg/dns 包对 DNS 资源记录&#xff08;RR&#xff09;接口 的定义&#xff1a; type RR interface {Header() *RR_HeaderString() stringcopy() RRlen(off int, compression map[string]struct{}) intpack(...)unpack(...)parse(...)isDuplicate(r2 RR) bool }这个接…...

Vue中的自定义指令适用于哪些场景

自定义指令在 Vue 中非常灵活且功能强大&#xff0c;它们可以在多种场景中使用&#xff0c;以实现特定的 DOM 操作或行为 自定义样式和类 自定义指令可以用来动态地添加或修改元素的样式和类。这在需要根据数据动态调整样式时非常有用。 <div id"app"><d…...

边缘计算平台

本文来源 &#xff1a; 腾讯元宝 边缘计算平台是一种在靠近数据源头的网络边缘侧部署的分布式计算架构&#xff0c;通过融合网络、计算、存储和应用核心能力&#xff0c;就近提供实时、低延迟的智能服务。以下是其核心要点&#xff1a; ​​1. 定义与特点​​ ​​定义​​&a…...

2025年5月H12-831新增题库带解析

组播基础 以下关于PIM-SM(SSM)的描述&#xff0c;错误的是哪一项? PIM-SM(SSM)无需维护RPPIM-SM(SSM)模型形成的组播分发树会一直存在&#xff0c;不会因为没有组播流量而消失PIM-SM(SSM)可以在成员端DR上基于组播源地址直接反向建立SPT在PIM-SM(SSM)中依日需要注册组播源 答…...

JavaScript - 运算符之逗号操作符与逗号分隔符(逗号操作符概述、逗号操作符用法、逗号分隔符、逗号分隔符用法)

一、逗号操作符概述 【表达式 1】, 【表达式 2】, 【表达式 3】, ..., 【表达式 N】逗号操作符&#xff08;,&#xff09;允许在一个语句中从左到右执行多个表达式&#xff0c;并返回最后一个表达式的值 二、逗号操作符用法 for 循环中的多变量控制 for (let i 0, j 10; i…...

AM1.5G太阳光模拟器参数

AM1.5G太阳光模拟器的参数通常包括光谱匹配度、空间均匀性、时间稳定性等关键指标&#xff0c;这些参数对于太阳能电池的测试和校准至关重要。以下是AM1.5G太阳光模拟器的主要参数&#xff1a; 光谱匹配度 AM1.5G光谱是指大气质量为1.5时&#xff0c;太阳光在地球表面的光谱分…...

YOLO11解决方案之距离计算探索

概述 Ultralytics提供了一系列的解决方案&#xff0c;利用YOLO11解决现实世界的问题&#xff0c;包括物体计数、模糊处理、热力图、安防系统、速度估计、物体追踪等多个方面的应用。 测量两个物体之间的间距被称为特定空间内的距离计算&#xff0c;YOLO11使用两个边界框的中心…...

OkHttp用法-Java调用http服务

特点&#xff1a;高性能&#xff0c;支持异步请求&#xff0c;连接池优化 官方文档&#xff1a;提供快速入门指南和高级功能&#xff08;如拦截器、连接池&#xff09;的详细说明&#xff0c;GitHub仓库包含丰富示例。 社区资源&#xff1a;中文教程丰富&#xff0c;GitHub高…...

c/c++中程序内存区域的划分

c/c程序内存分配的几个区域&#xff1a; 1.栈区&#xff1a;在执行函数时&#xff0c;函数内局部变量的存储单元都可以在栈上创建&#xff0c;函数执行结束时这些存储单元自动被释放&#xff0c;栈内存分配运算内置于处理器的指令集中&#xff0c;效率很高但是分配的内存容量有…...

‌JMeter聚合报告中的任务数和并发数区别

‌JMeter聚合报告中的任务数和并发数有本质的区别。‌ 任务数&#xff08;样本数&#xff09; 任务数或样本数是指在性能测试中发出的请求数量。例如&#xff0c;如果模拟20个用户&#xff0c;每个用户发送100次请求&#xff0c;那么总的任务数或样本数就是2000次请求‌ 并发…...

70、微服务保姆教程(十三)Docker容器详细讲义

一、关于Docker 1.1为什么要用docker? 随着开发的项目越来越复杂,软件越来越多,服务器越来越多,我们在开发和部署的时候会遇到很多问题,比如: 1.不同的应用程序可能会有不同的应用环境,比如Java开发的网站和php开发的网站依赖的软件就不一样,如果把他们依赖的软件都…...

2025年5月-信息系统项目管理师高级-软考高项-成本计算题

成本计算题挣值分析、成本计算题如何学?1、PV&#xff0c;EV&#xff0c;AC需要理解&#xff0c;根据题目给出的一些个条件需要求得这些值;2、CV&#xff0c;SV&#xff0c;CPI&#xff0c;SPI公式必须记住&#xff0c;需要根据求得的值判断项目的进度和成本的执行情况&#x…...

【BotSharp详细介绍——一步步实现MCP+LLM的聊天问答实例】

BotSharp详细介绍——一步步实现MCPLLM的聊天问答实例 一、MCP原理介绍二、创建BotSharp的项目&#xff0c;实现LLM推理机器人1、新建一个 解决方案&#xff0c;结构如下&#xff1a;2、先看下 MyWeatherPlugin3、创建MyWeatherMcpAPI 三、创建 MCP Server1、添加引用2、添加工…...

[Linux性能优化] 线程卡顿优化。Linux加入USB(HID)热插拔线程占用CPU优化。Linux中CPU使用率过高优化

文章目录 [Linux性能优化] 线程卡顿优化。一、问题定位&#xff1a;CPU 资源分析二、线程卡顿现场复现线程优化前图片线程优化后图片 [Linux性能优化] 线程卡顿优化。 一、问题定位&#xff1a;CPU 资源分析 线程卡顿通常与 CPU 资源竞争、线程调度异常相关&#xff0c;第一步…...

鸿蒙OSUniApp 开发的文件上传与下载功能#三方框架 #Uniapp

使用 UniApp 开发的文件上传与下载功能 前言 在移动应用开发中&#xff0c;文件上传与下载是非常常见且重要的功能需求。无论是上传用户头像、提交表单附件&#xff0c;还是下载资源文件、缓存图片&#xff0c;这些需求几乎存在于每一个成熟的应用中。UniApp 作为一个跨平台开…...

【MySQL】基础知识

MySQL(一)基础知识 MySQL 一、结构 1.客户端 2.服务器 分布式系统 二、存储 1.空间 1.1内存 1.1.1速度 1.1.2稳定性 1.1.3大小 1.1.4使用 1.2硬盘 1.2.1速度 1.2.2稳定性 1.2.3大小 1.2.4【Java学习】反射-CSDN博客 2.体系 表-数据库-服务器 3.特点 3.1…...

产品销量数据爬虫通用模板

最近遇到各行各业的需要爬取销售数据&#xff0c;每次写一个教程相对麻烦&#xff0c;所以思前考后我还是觉得写一个通用模板更适合。所以模板需要足够的灵活性&#xff0c;让用户能够自定义选择器。比如&#xff0c;产品标题、价格、销量的CSS选择器可能因网站而异&#xff0c…...

一文讲透 Vue3 + Three.js 材质属性之皮革篇【扫盲篇】

文章目录 前言一、Three.js材质系统基础1.1 为什么选择PBR材质&#xff1f;1.2 关键参数解析 二、不同类型皮革的材质配置2.1 牛皮材质实现2.2 羊皮材质实现2.3 仿皮材质实现 三、高级贴图技术3.1 贴图制作流程3.2 组合贴图实战 四、性能优化策略4.1 贴图压缩技术4.2 材质共享4…...

mysql读写分离

一、读写分离原理 客户端连接代理层&#xff0c;代理层&#xff08;中间件&#xff09;来实现读操作给从服务器&#xff0c;写操作给主服务器。 二、示例 mycat实现读写分离 读写分离在主从复制的基础上 1客户机1代理1主2从1、网络主 192.168.10.101从1 192.168.10.102从2 …...

Java集合框架

集合 概念&#xff1a;对象的容器&#xff0c;定义了对多个对象进行操作的常用方法。可实现数组的功能 和数组的区别 数组长度固定&#xff0c;集合长度不固定 数组可以存储基本类型和引用类型&#xff0c;集合只能存储引用类型 位置&#xff1a;java.util.* Collection体…...

salesforce如何导出所有字段

在 Salesforce 中&#xff0c;导出所有字段信息&#xff08;包括字段名、API 名、字段类型、是否可报表、是否可搜索等&#xff09;通常不是一个“一键完成”的操作&#xff0c;但可以通过几种方法实现。以下是常用的几种方法&#xff1a; ✅ 方法一&#xff1a;使用 Salesforc…...

一招解决Tailwindcss4.x与其他库样式冲突问题

当项目中引入tailwindcss&#xff0c;并与其他UI库混用时&#xff0c;可能会出现样式冲突问题&#xff0c;因为tailwindcss重置了一些基础样式&#xff0c;例如&#xff1a;引入tailwindcss后&#xff0c;原生button按钮没有了默认的样式。 在老版本中解决这个问题&#xff0c…...

[Harmony]封装一个可视化的数据持久化工具

1.添加权限 在module.json5文件中添加权限 // 声明应用需要请求的权限列表 "requestPermissions": [{"name": "ohos.permission.DISTRIBUTED_DATASYNC", // 权限名称&#xff1a;分布式数据同步权限"reason": "$string:distrib…...