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

nginx Rewrite 相关功能

一、Nginx Rewrite 概述

  1. 定义
    • Nginx 的 Rewrite 模块允许对请求的 URI 进行重写操作。它可以基于一定的规则修改请求的 URL 路径,然后将请求定向到新的 URL 地址,这在很多场景下都非常有用,比如实现 URL 美化、网站重构后的 URL 跳转等。
  2. 主要指令
    • rewrite
      • 语法:rewrite regex replacement [flag];
      • 功能:按照正则表达式regex匹配请求的 URI,如果匹配成功,则将 URI 替换为replacement所指定的内容flag是可选的标志,用于控制重写操作的行为。
    • if
      • 语法:if (condition) {...}
      • 功能:用于条件判断,根据condition(可以是变量、正则表达式匹配等)来决定是否执行大括号内的指令

二、Rewrite 规则中的标志(flag)

  1. last
    • 含义:停止处理当前的rewrite指令集,并重新开始在当前配置的server块内寻找新的location来处理请求
    • 示例:rewrite ^/old-path/(.+)$ /new - path/$1 last;
    • 应用场景:当需要将请求重定向到同一server内的其他location时使用
  2. break
    • 含义:停止处理当前的rewrite指令集,不再重新寻找location,直接使用当前重写后的 URI 进行请求处理。
    • 示例:rewrite ^/restricted/(.+)$ /private/$1 break;
    • 应用场景:在不希望重新进行location匹配的情况下,直接使用重写后的 URI 处理请求,比如访问受限制资源时。
  3. redirect
    • 含义:返回 302 临时重定向响应,告诉客户端请求的资源已临时移动到新的 URL
    • 示例:rewrite ^/temp - move/(.*)$ http://example.com/new - temp - loc/$1 redirect;
    • 应用场景:当资源临时移动到其他位置,希望客户端下次请求时能自动访问新位置时使用。
  4. permanent
    • 含义:返回 301 永久重定向响应,告诉客户端请求的资源已永久移动到新的 URL。
    • 示例:rewrite ^/old - product/(.*)$ http://example.com/new - product - line/$1 permanent;
    • 应用场景:当资源永久移动到其他位置,希望搜索引擎等客户端更新其索引时使用。

三、实验示例一

一、实验环境搭建

  1. 安装 Nginx
    • 在 Linux 系统(如 Ubuntu)上执行以下命令安装 Nginx:
      • sudo apt update
      • sudo apt install nginx -y
      • 启动 Nginx 服务:sudo service nginx start
      • 检查 Nginx 状态:sudo service nginx status
  2. 配置文件位置
    • Nginx 的主配置文件通常位于/etc/nginx/nginx.conf,但为了更好的组织配置,我们可以在/etc/nginx/conf.d/目录下创建自定义的配置文件,例如test.conf

二、实验配置

  1. /etc/nginx/conf.d/目录下创建并编辑test.conf文件:
    • sudo vi /etc/nginx/conf.d/test.conf
    • 内容如下:
      • server {listen       80;server_name  localhost;location / {root   /var/www/html;index  index.html index.htm;}# 重写规则:将以 /old/ 开头的URL重写为 /new/index.htmllocation /old/ {rewrite ^/old/(.*)$ /new/index.html permanent;}# 条件重写规则:如果请求的文件不存在,将 /search/ 开头的请求重定向到 /404.htmllocation /search/ {try_files $uri $uri/ /404.html;if ($uri ~* ^/search/(.*)$) {rewrite ^ /404.html break;}}
        }
        
  2. 创建测试文件:
    • /var/www/html目录下创建以下文件:
      • sudo mkdir -p /var/www/html/old
      • sudo mkdir -p /var/www/html/new
      • sudo touch /var/www/html/old/test.txt
      • sudo touch /var/www/html/new/test.html
      • sudo touch /var/www/html/404.html

三、实验测试

  1. 测试重写规则
    • 在浏览器中访问http://localhost/old/test.txt,由于重写规则,应该会被 301 永久重定向到http://localhost/new/index.html
  2. 测试条件重写规则
    • 在浏览器中访问http://localhost/search/nonexistent,由于try_files指令找不到请求的文件,并且满足if条件,会直接使用/404.html进行响应,而不会进行进一步的搜索或重定向循环。 

四、 实验结果图

通过这个实验,你可以更深入地理解 Nginx 的 Rewrite 功能以及如何结合try_filesif等指令来实现复杂的 URL 处理逻辑,同时通过具体的文件访问测试来验证配置的正确性。

四、实验示例二 

一、实验环境搭建

  1. 安装 Nginx

    • 登录到 CentOS 系统,打开终端,执行以下命令来更新系统软件包,确保系统处于最新状态:
      • yum update -y
    • 接着安装 Nginx:
      • yum install nginx -y
    • 启动 Nginx 服务:
      • systemctl start nginx
    • 检查 Nginx 服务是否成功启动:
      • systemctl status nginx
      • 如果看到类似 “active (running)” 的状态信息,说明 Nginx 已成功启动。
  2. 配置文件位置及准备

    • Nginx 的主配置文件通常位于/etc/nginx/nginx.conf,为了便于管理本次实验相关配置,我们在/etc/nginx/conf.d/目录下创建一个自定义配置文件,命名为rewrite_test.conf。可以使用以下命令创建并编辑该文件:
      • vi /etc/nginx/conf.d/rewrite_test.conf

二、实验配置

  1. vi编辑器中,输入以下内容来配置rewrite_test.conf文件(按i键进入插入模式进行编辑,编辑完成后按Esc键,再输入:wq保存并退出):
server {listen       80;server_name  localhost;root   /usr/share/nginx/html;index  index.html index.htm;# 使用last标志的重写规则location /page1/ {rewrite ^/page1/(.*)$ /newpage1/$1 last;}# 使用break标志的重写规则location /page2/ {rewrite ^/page2/(.*)$ /newpage2/$1 break;}# 使用redirect标志的重写规则location /page3/ {rewrite ^/page3/(.*)$ /newpage3/$1 redirect;}# 使用permanent标志的重写规则location /page4/ {rewrite ^/page4/(.*)$ /newpage4/$1 permanent;}
}
  1. 创建测试文件及目录:
    • /usr/share/nginx/html目录下创建以下目录和文件,使用以下命令:
      • 创建目录:
        • mkdir -p /usr/share/nginx/html/page1
        • mkdir -p /usr/share/nginx/html/newpage1
        • mkdir -p /usr/share/nginx/html/page2
        • mkdir -p /usr/share/nginx/html/newpage2
        • mkdir -p /usr/share/nginx/html/page3
        • mkdir -p /usr/share/nginx/html/newpage3
        • mkdir -p /usr/share/nginx/html/page4
        • mkdir -p /usr/share/nginx/html/newpage4
  1. 创建测试文件及目录:
    • /usr/share/nginx/html目录下创建以下目录和文件,使用以下命令:
      • 创建目录:
        • mkdir -p /usr/share/nginx/html/page1
        • mkdir -p /usr/share/nginx/html/newpage1
        • mkdir -p /usr/share/nginx/html/page2
        • mkdir -p /usr/share/nginx/html/newpage2
        • mkdir -p /usr/share/nginx/html/page3
        • mkdir -p /usr/share/nginx/html/newpage3
        • mkdir -p /usr/share/nginx/html/page4
        • mkdir -p /usr/share/nginx/html/newpage4
      • 创建index.html文件并编辑内容(以page1相关为例,其他同理):
        • /usr/share/nginx/html/page1目录下创建index.html文件:
          • vi /usr/share/nginx/html/page1/index.html
          • 输入以下内容(可自行调整内容用于区分不同页面):
            • <html><body><h1>Page 1</h1></body></html>
              
        • 按照同样的方式,在/usr/share/nginx/html/newpage1目录下创建index.html文件,内容可设为:
          • <html><body><h1>New Page 1</h1></body></html>
            
        • 依次为page2newpage2page3newpage3page4newpage4等目录下创建相应的index.html文件,并设置不同的简单内容用于区分,比如在page2对应的index.html中写<html><body><h1>Page 2</h1></body></html>,在newpage2对应的index.html中写<html><body><h1>New Page 2</h1></body></html>,以此类推。

三、实验测试

  1. 测试 last 标志
    • 打开浏览器,在地址栏输入http://localhost/page1/,按下回车键。由于last标志的作用,Nginx 会停止处理当前的rewrite指令集,并重新开始在当前配置的server块内寻找新的location来处理请求。此时,请求会被重定向到/newpage1/,然后 Nginx 会在/usr/share/nginx/html/newpage1目录下查找index.html文件,并将该文件内容返回给浏览器,你可以看到浏览器页面中显示的标题为 “New Page 1”。
  2. 测试 break 标志
    • 在浏览器地址栏输入http://localhost/page2/,回车后,因为break标志,Nginx 会停止处理当前的rewrite指令集,不再重新寻找location,直接使用当前重写后的 URI(/newpage2/)进行请求处理,接着在/usr/share/nginx/html/newpage2目录下查找index.html文件,并将其内容返回给浏览器,页面中会显示 “New Page 2” 字样。
  3. 测试 redirect 标志
    • 访问http://localhost/page3/redirect标志会使 Nginx 返回 302 临时重定向响应,告诉客户端请求的资源已临时移动到/newpage3/。浏览器收到这个临时重定向响应后,会自动向/newpage3/发起新的请求,然后 Nginx 在/usr/share/nginx/html/newpage3目录下查找index.html文件,并将其内容返回给浏览器,此时页面显示 “New Page 3”。你还可以通过浏览器的开发者工具(一般按F12键调出),查看网络请求的详细信息,确认返回的状态码是 302。
  4. 测试 permanent 标志
    • 输入http://localhost/page4/进行访问,permanent标志会让 Nginx 返回 301 永久重定向响应,告知客户端请求的资源已永久移动到/newpage4/。浏览器会更新书签以及搜索引擎索引等相关信息,下次再访问/page4/时,就会直接请求/newpage4/。同样,Nginx 会在/usr/share/nginx/html/newpage4目录下查找index.html文件并返回其内容,使浏览器页面显示 “New Page 4”。通过浏览器开发者工具查看网络请求,能确认返回的状态码为 301,并且后续再次访问http://localhost/page4/时,浏览器会直接跳转到/newpage4/,不再需要从/page4/进行重定向了。

四、实验分析

  1. last 标志的行为
    • last标志使得 Nginx 在执行完当前重写规则后,重新进行location匹配流程。这在实际应用中非常实用,例如当网站的页面结构调整后,某个旧路径下的页面需要重定向到新路径,且新路径对应的处理逻辑在其他location块中有更复杂的配置时,last标志就能确保请求按照新路径对应的location规则进行后续处理,有助于实现灵活的页面跳转和资源分配逻辑,方便对不同路径的请求进行分类管理以及定制化响应。
  2. break 标志的行为
    • break标志的特点是直接使用重写后的 URI 进行后续请求处理,不再进行额外的location匹配操作。在一些特定场景下,比如当对某些特定路径的请求进行内部重写,并且重写后的资源处理逻辑已经明确固定时,使用break标志可以避免不必要的location查找过程,快速将请求引导到正确的资源位置,从而提高服务器的处理效率,减少资源消耗,同时也能避免因复杂的location匹配可能导致的一些潜在冲突或错误。
  3. redirect 和 permanent 标志的区别
    • redirect(302 临时重定向)和permanent(301 永久重定向)这两个标志主要在对客户端和搜索引擎的影响方面存在差异。302临时重定向意味着资源只是暂时被移动到了新的位置,客户端下次访问时可能仍然会尝试访问原来的 URL;而301永久重定向则明确告知客户端和搜索引擎相关资源已经永久性地迁移到了新的 URL。搜索引擎收到 301 响应后,会更新其索引信息,以后搜索相关内容时就会直接指向新的 URL。在实际的网站运营中,根据页面或资源移动的性质来合理选择使用这两个标志十分重要,例如网站进行大规模重构,部分页面 URL 发生永久性变更时,使用permanent标志有助于搜索引擎及时更新索引,提升网站在搜索结果中的排名以及用户访问的准确性;而如果只是临时进行页面维护、测试或者短期内调整页面位置等情况,则可以采用redirect标志,避免对搜索引擎索引造成不必要的频繁变动和可能出现的混乱情况。

通过这个实验,能够清晰地观察和理解 Nginx Rewrite 规则中不同标志(flag)对处理请求的 URI 重写和重定向行为的影响,有助于在实际的 Web 服务器配置工作中,依据具体的业务需求准确选择合适的重写策略和标志,进而优化网站的 URL 结构、提升资源访问的效率以及改善用户体验和搜索引擎优化效果。同时,在实验过程中通过创建配套的测试文件和目录,并结合浏览器访问及查看开发者工具中的状态码等操作,可以更精准地验证不同标志的功能和作用,保证实验结果的可靠性和有效性。

相关文章:

nginx Rewrite 相关功能

一、Nginx Rewrite 概述 定义 Nginx 的 Rewrite 模块允许对请求的 URI 进行重写操作。它可以基于一定的规则修改请求的 URL 路径&#xff0c;然后将请求定向到新的 URL 地址&#xff0c;这在很多场景下都非常有用&#xff0c;比如实现 URL 美化、网站重构后的 URL 跳转等。主要…...

2024年AI相关的论文写作经验(附实践资料下载)

在撰写AI相关的论文时&#xff0c;以下是一些实用的经验和技巧&#xff1a; 明确写作目标&#xff1a;在开始写作之前&#xff0c;明确你的论文类型&#xff08;期刊论文、毕业论文等&#xff09;和目标&#xff0c;这将影响你的写作方式和工具选择。 AI辅助文献检索&#xff…...

List详解

List详解 在Java中&#xff0c;List是一个接口&#xff0c;它继承自Collection接口。List接口为数据的有序集合提供了操作接口&#xff0c;其中可以包含重复的元素。这个接口的实现类以特定的方式存储元素&#xff0c;允许元素根据索引进行访问&#xff0c;同时还支持通过迭代…...

Flutter实现可拖拽操作Draggable

文章目录 1. Draggable 控件的构造函数主要参数&#xff1a; 2. Draggable 的工作原理3. 常见用法示例 1&#xff1a;基本的拖拽控件解释&#xff1a;示例 2&#xff1a;与 DragTarget 配合使用解释&#xff1a; 4. Draggable 的回调详解5. 总结 Draggable 是 Flutter 中一个用…...

【QSS样式表 - ⑥】:QPushButton控件样式

文章目录 QPushBUtton控件样式QSS示例 QPushBUtton控件样式 常用子控件 常用伪状态 QSS示例 代码&#xff1a; QPushButton {background-color: #99B5D1;color: white;font-weigth: bold;border-radius: 20px; }QPushButton:hover {background-color: red; }QPushButton:p…...

DPO(Direct Preference Optimization)算法解释:中英双语

中文版 DPO paper: https://arxiv.org/pdf/2305.18290 DPO 算法详解&#xff1a;从理论到实现 1. 什么是 DPO&#xff1f; DPO&#xff08;Direct Preference Optimization&#xff09;是一种直接基于人类偏好进行优化的算法&#xff0c;旨在解决从人类偏好数据中训练出表现…...

springboot495基于java的物资综合管理系统的设计与实现(论文+源码)_kaic

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统物资综合管理系统信息管理难度大&#xff0c;容错率低&am…...

JavaScript语言的编程范式

JavaScript&#xff1a;面向对象与函数式编程的双重奏 在编程世界中&#xff0c;JavaScript 无疑是一颗璀璨的明星&#xff0c;它不仅主宰着前端开发领域&#xff0c;还在后端、桌面应用、甚至物联网设备上展现出了强大的生命力。JavaScript 的魅力在于其灵活多变的编程范式&a…...

MyBatis动态 SQL 的执行原理

MyBatis 动态 SQL 是 MyBatis 框架中的一个重要特性&#xff0c;它允许开发者根据条件动态地生成不同的 SQL 语句。通过使用动态 SQL&#xff0c;开发者可以根据传入的参数动态地构建 SQL 查询&#xff0c;这样就避免了写多个 SQL 语句&#xff0c;提升了代码的灵活性和可维护性…...

PostgreSQL自带的一个命令行工具pg_waldump

pg_waldump是PostgreSQL自带的一个命令行工具&#xff0c;用于以人类可读的形式显示PostgreSQL数据库集簇的预写式日志&#xff08;Write-Ahead Logging&#xff0c;WAL&#xff09;。以下是对pg_waldump的详细介绍&#xff1a; 一、主要用途 pg_waldump主要用于调试或教育目…...

K8s 常用资源介绍

在 Kubernetes 中&#xff0c;资源指的是可以在集群中管理的对象&#xff08;Objects&#xff09;。这些资源用来定义和控制应用、服务、以及集群的状态。以下是 Kubernetes 中常见的资源及其用途介绍&#xff1a; 1. 工作负载资源&#xff08;Workloads Resources&#xff09;…...

基于 Python 大数据的拼团购物数据分析系统的设计与实现

标题:基于 Python 大数据的拼团购物数据分析系统的设计与实现 内容:1.摘要 本文设计并实现了一个基于 Python 大数据的拼团购物数据分析系统。通过对拼团购物数据的收集、清洗和分析&#xff0c;系统能够为商家提供用户行为分析、商品销售情况分析等功能&#xff0c;帮助商家更…...

finalshell密码解密

finalshell密码解密 在线网站运行java https://c.runoob.com/compile/10/ import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.IOException; import java.math.BigInteger; import java.security.MessageDigest; import java.security.N…...

利用Java爬虫速卖通按关键字搜索AliExpress商品

在这个信息爆炸的时代&#xff0c;数据的价值日益凸显。对于电商领域的从业者来说&#xff0c;能够快速获取商品信息成为了一项重要的技能。速卖通&#xff08;AliExpress&#xff09;作为全球领先的跨境电商平台&#xff0c;拥有海量的商品数据。本文将介绍如何使用Java语言编…...

每天40分玩转Django:Django缓存

一、Django缓存概述 在高并发的Web应用中,缓存是提高性能的重要手段。通过缓存频繁访问的数据,可以显著减少数据库查询和渲染模板的时间,从而加快响应速度,提升用户体验。Django提供了多层级的缓存方案,可以灵活地满足不同场景下的缓存需求。 Django支持的缓存方式包括: 视图…...

matrix-breakout-2-morpheus

将这一关的镜像导入虚拟机&#xff0c;出现以下页面表示导入成功 以root身份打开kali终端&#xff0c;输入以下命令&#xff0c;查看靶机ip arp-scan -l 根据得到的靶机ip&#xff0c;浏览器访问进入环境 我们从当前页面没有得到有用的信息&#xff0c;尝试扫描后台 发现有一个…...

第七节:GLM-4v-9b模型的视觉模型源码解读

文章目录 前言一、EVA2CLIPModel视觉编码模块结构二、PatchEmbedding图像分块源码解读三、GLM的transformer结构源码解读四、GLU映射方法源码解读前言 清华智普的GLM-4v-9b模型,作为优化的多模态大模型,特别适用于国内应用场景,解决了国外模型本地化不足的问题。本专栏提供…...

@RestControllerAdvice和@ControllerAdvice的区别

RestControllerAdvice 和 ControllerAdvice 都是 Spring 框架中的注解&#xff0c;用于定义全局的异常处理、数据绑定、模型属性共享等功能。它们的区别主要体现在返回值的处理和适用的场景。 1. ControllerAdvice 功能&#xff1a; ControllerAdvice 是 Spring MVC 提供的全局…...

c++ 类似与c# 线程 AutoResetEvent 和 ManualResetEvent的实现

在 C 中&#xff0c;没有直接类似于 C# 的 AutoResetEvent 和 ManualResetEvent 的类&#xff0c;但可以通过一些线程同步机制来实现类似的功能。C 提供了一些线程同步原语&#xff0c;如 std::condition_variable 和 std::mutex&#xff0c;这些可以用来模拟类似于 C# 中 Auto…...

简单贪吃蛇小游戏的设计与实现

文章目录 1、知识预备1.1 WIN32 API1.1.1 什么是WIN32 API1.1.2 了解部分WIN32 API1.1.2.1 控制台坐标1.1.2.2 控制台光标1.1.2.3 获取键盘按键情况 2.1 宽字符2.1.1 C语言的国际化2.1.2 宽字符的打印 2、 贪吃蛇游戏设计2.1 游戏开始2.2 游戏运行2.2.1 更新分数2.2.2 按键检测…...

动态规划<五> 子数组问题(含对应LeetcodeOJ题)

目录 引例 经典LeetcodeOJ题 1.第一题 2.第二题 3.第三题 4.第四题 5.第五题 6.第六题 7.第七题 引例 OJ传送门 Leetcode<53> 最大子数组和 画图分析: 使用动态规划解决 1.状态表示 dp[i]表示以i位置为结尾的所有子数组中的最大和 2.状态转移方程 子数组的问题可以…...

计算机网络——期末复习(4)协议或技术汇总、思维导图

思维导图 协议与技术 物理层通信协议&#xff1a;曼彻斯特编码链路层通信协议&#xff1a;CSMA/CD &#xff08;1&#xff09;停止-等待协议&#xff08;属于自动请求重传ARQ协议&#xff09;&#xff1a;确认、否认、重传、超时重传、 &#xff08;2&#xff09;回退N帧协…...

在 RK3568 Linux 系统上使用 TUN 设备:详细教程

RK3568 是一个基于 ARM 架构的处理器,广泛应用于嵌入式系统和物联网设备。Linux 系统上的 TUN(网络隧道)设备提供了一个虚拟的网络接口,允许用户空间程序通过内核与网络栈进行交互。本文将详细介绍如何在 RK3568 上配置和使用 TUN 设备,适用于搭建 VPN 或容器网络等应用场…...

记录一次前端绘画海报的过程及遇到的几个问题

先看效果 使用工具 html2canvas import html2canvas from html2canvas// 绘画前的内容 我就不过多写了<div class"content" ref"contentRef" v-show"!imgShow"><img :src"getReplaceImg(friendObj.coverUrl)" alt"&qu…...

费舍尔信息矩阵全面讲述

费舍尔信息矩阵&#xff08;Fisher Information Matrix&#xff09; 费舍尔信息矩阵是统计学中一个非常重要的概念&#xff0c;尤其在参数估计、最大似然估计&#xff08;MLE&#xff09;和贝叶斯推断中具有广泛的应用。它反映了参数估计的不确定性程度&#xff0c;也可以用来…...

【CSS in Depth 2 精译_094】16.2:CSS 变换在动效中的应用(下)——导航菜单的文本标签“飞入”特效与交错渲染效果的实现

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第五部分 添加动效 ✔️【第 16 章 变换】 ✔️ 16.1 旋转、平移、缩放与倾斜 16.1.1 变换原点的更改16.1.2 多重变换的设置16.1.3 单个变换属性的设置 16.2 变换在动效中的应用 16.2.1 放大图标&am…...

webpack3 webpack4 webpack5 有什么区别

性能优化 Webpack 3 性能优化主要依赖开发者手动配置各种插件。例如&#xff0c;在代码分割方面&#xff0c;需要通过CommonsChunkPlugin来实现公共模块的提取&#xff0c;其配置相对复杂。如果配置不当&#xff0c;可能会导致模块重复打包等问题&#xff0c;影响构建效率和最终…...

vue2 升级为 vite 打包

VUE2 中使用 Webpack 打包、开发&#xff0c;每次打包时间太久&#xff0c;尤其是在开发的过程中&#xff0c;本文记录一下 VUE2 升级Vite 步骤。 安装 Vue2 Vite 依赖 dev 依赖 vitejs/plugin-vue2": "^2.3.3 vitejs/plugin-vue2-jsx": "^1.1.1 vite&…...

[创业之路-206]:《华为战略管理法-DSTE实战体系》- 6-关键成功因素法CSF

目录 一、概述 1、定义与起源 2、关键成功因素的定义 3、关键成功因素的来源 4、关键成功因素的确认方法 5、关键成功因素法的步骤 6、关键成功因素法的应用 7、关键成功因素法的优势与局限性 二、 关键成功因素法CSF的应用 1、企业战略管理 2、项目管理 3、绩效管…...

WebRTC服务质量(08)- 重传机制(05) RTX机制

WebRTC服务质量&#xff08;01&#xff09;- Qos概述 WebRTC服务质量&#xff08;02&#xff09;- RTP协议 WebRTC服务质量&#xff08;03&#xff09;- RTCP协议 WebRTC服务质量&#xff08;04&#xff09;- 重传机制&#xff08;01) RTX NACK概述 WebRTC服务质量&#xff08;…...

Go的select的运行原理

Go语言中的select语句是一种专门用于处理多个通道&#xff08;channel&#xff09;操作的控制结构。其运行原理可以概括为以下几点&#xff1a; 1. 监听多个通道 select语句能够同时监听多个通道上的操作&#xff0c;这些操作可以是发送操作或接收操作。每个通道操作都对应se…...

操作002:HelloWorld

文章目录 操作002&#xff1a;HelloWorld一、目标二、具体操作1、创建Java工程①消息发送端&#xff08;生产者&#xff09;②消息接收端&#xff08;消费者&#xff09;③添加依赖 2、发送消息①Java代码②查看效果 3、接收消息①Java代码②控制台打印③查看后台管理界面 操作…...

3D坐标下,一点在某一线段上的左右方向的判定

3D坐标下&#xff0c;一点在某一线段上的左右方向的判定 代码 代码 #include <iostream> #include <Eigen/Dense>#define M_PI 3.1415926// 计算三点组成平面的参数和变换到XOY平面的变换矩阵 void computePlaneAndTransform(const Eigen::Vector3d& P1, cons…...

Visual Studio 使用 GitHub Copilot 与 IntelliCode 辅助编码 【AI辅助开发系列】

&#x1f380;&#x1f380;&#x1f380;【AI辅助编程系列】&#x1f380;&#x1f380;&#x1f380; Visual Studio 使用 GitHub Copilot 与 IntelliCode 辅助编码Visual Studio 安装和管理 GitHub CopilotVisual Studio 使用 GitHub Copilot 扩展Visual Studio 使用 GitHu…...

Linux高级--2.4.5 靠协议头保证传输的 MAC/IP/TCP/UDP---协议帧格式

任何网络协议&#xff0c;都必须要用包头里面设置写特殊字段来标识自己&#xff0c;传输越复杂&#xff0c;越稳定&#xff0c;越高性能的协议&#xff0c;包头越复杂。我们理解这些包头中每个字段的作用要站在它们解决什么问题的角度来理解。因为没人愿意让包头那么复杂。 本…...

【UE5 C++课程系列笔记】14——GameInstanceSubsystem与动态多播的简单结合使用

效果 通过在关卡蓝图中触发GameInstanceSubsystem包含的委托&#xff0c;来触发所有绑定到这个委托的事件&#xff0c;从而实现跨蓝图通信。 步骤 1. 新建一个C类 这里命名为“SubsystemAndDelegate” 引入GameInstanceSubsystem.h&#xff0c;让“SubsystemAndDelegate”继承…...

PyQt实战——随机涂格子的特色进度条(十一)

系类往期文章&#xff1a; PyQt5实战——多脚本集合包&#xff0c;前言与环境配置&#xff08;一&#xff09; PyQt5实战——多脚本集合包&#xff0c;UI以及工程布局&#xff08;二&#xff09; PyQt5实战——多脚本集合包&#xff0c;程序入口QMainWindow&#xff08;三&…...

.NET 8.0 项目升级到 .NET 9.0

本文项目从.NETCore3.1开始一直延续到目前&#xff0c;如果您没有升级过&#xff0c;请参考以下文章&#xff1a; .Net Core 2.2 升级到 .Net Core 3.1&#xff1a;https://blog.csdn.net/hefeng_aspnet/article/details/131259537 NetCore3.1或Net6.0项目升级到Net7.0&#x…...

用Python写炸金花游戏

文章目录 **代码分解与讲解**1. **扑克牌的生成与洗牌**2. **给玩家发牌**3. **打印玩家的手牌**4. **定义牌的优先级**5. **判断牌型**6. **确定牌型优先级**7. **比较两手牌的大小**8. **打印结果** 完整代码 以下游戏规则&#xff1a; 那么我们要实现的功能&#xff0c;就是…...

深度学习中的并行策略概述:2 Data Parallelism

深度学习中的并行策略概述&#xff1a;2 Data Parallelism 数据并行&#xff08;Data Parallelism&#xff09;的核心在于将模型的数据处理过程并行化。具体来说&#xff0c;面对大规模数据批次时&#xff0c;将其拆分为较小的子批次&#xff0c;并在多个计算设备上同时进行处…...

电商平台能挡住恶意网络爬虫的攻击吗?

爬虫盗取电商数据的步骤 爬虫技术作为一种数据获取工具&#xff0c;正逐渐成为电商平台的一大隐患。网络爬虫不仅能够获取商家关键信息并滋生仿冒网站&#xff0c;还能收集用户敏感信息&#xff0c;对用户的财产安全和隐私造成严重威胁。同时&#xff0c;爬虫攻击还会扰乱正常…...

Jenkins安装方法二

配置环境 和 Jenkins 官方的 yum 源之后进行安装 # 关闭防火墙 $ sudo systemctl stop firewalld $ sudo systemctl disable firewalld# 安装 EPEL 源 $ sudo yum install -y epel-release # 安装 wget $ sudo yum install -y wget# 配置 Jenkins 官方 yum 源 $ sudo wget -O /…...

Nginx性能优化全方案:打造一个高效服务器

提到前面&#xff1a;一个热衷技术&#xff0c;反对八股的资深研发&#xff0c;不卖课不引流&#xff0c;专注分享高质量教学博客。 如果觉得文章还不错的话&#xff0c;可以点赞收藏关注 支持一下&#xff0c;持续分享高质量技术博客。 如果有什么需要改进的地方还请大佬指出❌…...

【每日学点鸿蒙知识】沙箱目录、图片压缩、characteristicsArray、gm-crypto 国密加解密、通知权限

1、HarmonyOS 如何创建应用沙箱目录&#xff1f; 下载文件&#xff0c;想下载到自己新建的应用沙箱目录&#xff0c;有什么方法实现吗&#xff1f; fs.mkdir可以创建目录 参考文档&#xff1a;https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis…...

XMLHttpRequest的基础知识

get请求 const xml new XMLHttpRequest(); xml.open("GET", "https://jsonplaceholder.typicode.com/todos/1", true); xml.onreadystatechange function () {if (xml.readyState 4 && xml.status 200) {console.log(xml.responseText);} }…...

学习笔记(C#基础书籍)-- C#基础篇

&#xff08;12.24&#xff09; C#介绍&#xff1a;《第一章》 特点&#xff1a;语法简洁&#xff0c;面向对象&#xff0c;支持绝大部分的web标准&#xff0c;强大的安全机制&#xff08;垃圾回收器&#xff09;&#xff0c;兼容性好&#xff08;遵循.NET的公共语言规范【CL…...

现在有什么赛道可以干到退休?

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;点击跳转到网站 &#xff0c;对人工智能感兴趣的小伙伴可以点进去看看。 最近&#xff0c;一则“90后无论男女都得65岁以后退休”的消息在多个网…...

【VScode】第三方GPT编程工具-CodeMoss安装教程

一、CodeMoss是什么&#xff1f; CodeMoss是一款集编程、学习和办公于一体的高效工具。它兼容多种主流平台&#xff0c;包括VSCode、IDER、Chrome插件、Web和APP等&#xff0c;支持插件安装&#xff0c;尤其在VSCode和IDER上的表现尤为出色。无论你是编程新手还是资深开发者&a…...

选择屏幕的用法

**************************定义控件*********************************** SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-002. SELECT-OPTIONS bukrs FOR iloa-bukrs . "公司代码 SELECT-OPTIONS swerk FOR iloa-swerk OBLIGATORY . "工厂 SELECT-O…...

VirtualBox下ubuntu23.04使用主机串口以及使用 minicom 进行串口调试

VirtualBox下ubuntu23.04使用主机串口以及使用 minicom 进行串口调试 一、打开设备管理器看主机&#xff08;Window系统&#xff09;是否识别出串口&#xff0c;我这边显示的串行通信端口是COM3 二、打开VirtualBox&#xff0c;设置串口和USB设备 串口设置&#xff1a; 启用…...