Nginx 深度解析:高性能 Web 服务器与反向代理的艺术

news2024/12/24 11:40:38

一、引言

随着互联网的快速发展,用户对网站和应用的响应速度、并发处理能力以及可靠性的要求越来越高。传统的 Web 服务器在面对大规模并发请求时往往显得力不从心,而 Nginx 以其高效的事件驱动模型、优秀的反向代理功能以及灵活的配置选项,为解决这些问题提供了强大的解决方案。无论是构建高流量的网站、实现负载均衡,还是进行安全防护,Nginx 都能发挥重要作用。

二、Nginx 基础概念

(一)什么是 Nginx

Nginx(Engine X)是一款开源的高性能 Web 服务器和反向代理服务器,同时也可以作为邮件代理服务器和通用的 TCP/UDP 代理服务器。它由俄罗斯的程序员 Igor Sysoev 开发,于 2004 年首次公开发布。Nginx 以其轻量级、高性能、高并发处理能力和低内存消耗等特点而闻名,被广泛应用于各种规模的网站和应用中。

(二)Nginx 的特点

  1. 高性能
    • Nginx 采用了事件驱动的异步非阻塞架构,能够高效地处理大量并发连接。它可以在不创建新进程或线程的情况下处理多个连接,从而大大降低了系统资源的消耗。
    • Nginx 还具有优秀的负载均衡算法,可以将请求均匀地分配到多个后端服务器上,提高系统的整体性能和可靠性。
  2. 稳定性
    • Nginx 经过了长时间的实践检验,具有很高的稳定性和可靠性。它可以在长时间运行的情况下保持稳定的性能,不会因为长时间运行而出现性能下降或崩溃的情况。
    • Nginx 还具有自动恢复功能,当出现故障时可以自动重新启动服务,保证系统的持续运行。
  3. 灵活性
    • Nginx 的配置非常灵活,可以根据不同的需求进行定制化配置。它支持多种模块和插件,可以通过添加模块和插件来扩展其功能。
    • Nginx 还支持动态配置,可以在不重启服务器的情况下修改配置文件,提高了系统的可维护性和灵活性。
  4. 安全性
    • Nginx 提供了多种安全防护功能,如访问控制、IP 过滤、SSL/TLS 加密等,可以有效地保护网站和应用的安全。
    • Nginx 还可以与其他安全软件(如防火墙、入侵检测系统等)进行集成,提高系统的整体安全性。

(三)Nginx 的工作原理

  1. 事件驱动模型
    • Nginx 采用了事件驱动的异步非阻塞架构,它通过监听网络事件(如连接请求、数据读取、数据写入等)来处理请求。当一个事件发生时,Nginx 会调用相应的事件处理函数来处理这个事件。
    • Nginx 的事件驱动模型可以在不创建新进程或线程的情况下处理多个连接,从而大大降低了系统资源的消耗。同时,它还可以提高系统的并发处理能力,使得 Nginx 能够轻松应对高并发的请求。
  2. 反向代理
    • Nginx 可以作为反向代理服务器,将客户端的请求转发到后端的服务器上。当客户端向 Nginx 发送请求时,Nginx 会根据配置的规则将请求转发到后端的服务器上,并将后端服务器的响应返回给客户端。
    • 反向代理可以实现负载均衡、提高系统的可靠性和安全性等功能。通过将请求转发到多个后端服务器上,Nginx 可以实现负载均衡,提高系统的整体性能和可靠性。同时,它还可以隐藏后端服务器的真实 IP 地址,提高系统的安全性。
  3. 静态文件服务
    • Nginx 可以作为静态文件服务器,直接向客户端提供静态文件(如 HTML、CSS、JavaScript、图片等)。当客户端请求一个静态文件时,Nginx 会直接从磁盘上读取文件内容,并将文件内容返回给客户端。
    • 静态文件服务可以提高系统的性能和响应速度。由于 Nginx 可以直接从磁盘上读取文件内容,而不需要经过后端的服务器处理,因此可以大大提高系统的响应速度。同时,它还可以减轻后端服务器的负担,提高系统的整体性能。

三、Nginx 的安装与配置

(一)安装 Nginx

  1. 在 Linux 系统上安装 Nginx
    • 不同的 Linux 发行版安装 Nginx 的方法略有不同。以 Ubuntu 为例,可以通过以下命令安装 Nginx:

sudo apt update
sudo apt install nginx

  • 安装完成后,可以通过以下命令检查 Nginx 是否安装成功:

nginx -v

  • 如果输出了 Nginx 的版本信息,则说明安装成功。

  1. 在 Windows 系统上安装 Nginx
    • 可以从 Nginx 官方网站下载 Windows 版本的 Nginx 安装包。下载完成后,双击安装包进行安装。安装过程非常简单,只需要按照安装向导的提示进行操作即可。
    • 安装完成后,可以在命令提示符中输入以下命令检查 Nginx 是否安装成功:

nginx -v

  • 如果输出了 Nginx 的版本信息,则说明安装成功。

(二)Nginx 的基本配置

  1. 配置文件结构
    • Nginx 的主要配置文件是nginx.conf,它通常位于 Nginx 的安装目录下。nginx.conf文件由多个部分组成,包括全局块、events 块、http 块等。
    • 全局块:包含 Nginx 服务器的全局配置信息,如工作进程数、错误日志路径等。
    • events 块:包含 Nginx 服务器的事件处理配置信息,如连接处理方式、最大连接数等。
    • http 块:包含 Nginx 服务器的 HTTP 服务相关的配置信息,如虚拟主机、反向代理、静态文件服务等。
  2. 配置示例
    • 以下是一个简单的 Nginx 配置示例:

user nginx;
worker_processes auto;

error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

events {
    worker_connections 1024;
}

http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log /var/log/nginx/access.log main;

    sendfile on;
    #tcp_nopush     on;

    keepalive_timeout 65;

    #gzip  on;

    server {
        listen 80;
        server_name localhost;

        location / {
            root /usr/share/nginx/html;
            index index.html index.htm;
        }

        #error_page 404 /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page 500 502 503 504 /50x.html;
        location = /50x.html {
            root /usr/share/nginx/html;
        }
    }
}

  • 这个配置示例中,定义了一个 Nginx 服务器,监听 80 端口,服务名为localhost。它将/usr/share/nginx/html目录作为静态文件根目录,并定义了错误页面的处理方式。

(三)Nginx 的高级配置

  1. 虚拟主机配置
    • Nginx 可以通过配置虚拟主机来实现多个网站在同一台服务器上的部署。虚拟主机可以通过不同的域名或 IP 地址进行区分。
    • 以下是一个虚拟主机配置示例:

http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log /var/log/nginx/access.log main;

    sendfile on;
    #tcp_nopush     on;

    keepalive_timeout 65;

    #gzip  on;

    server {
        listen 80;
        server_name example.com;

        location / {
            root /var/www/example.com;
            index index.html index.htm;
        }
    }

    server {
        listen 80;
        server_name another-example.com;

        location / {
            root /var/www/another-example.com;
            index index.html index.htm;
        }
    }
}

  • 在这个配置示例中,定义了两个虚拟主机,分别对应example.comanother-example.com两个域名。每个虚拟主机都有自己的根目录和默认首页。

  1. 反向代理配置
    • Nginx 可以作为反向代理服务器,将客户端的请求转发到后端的服务器上。反向代理可以实现负载均衡、提高系统的可靠性和安全性等功能。
    • 以下是一个反向代理配置示例:

http {
    upstream backend {
        server backend1.example.com:8080;
        server backend2.example.com:8080;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;
        }
    }
}

  • 在这个配置示例中,定义了一个名为backend的上游服务器组,包含两个后端服务器backend1.example.com:8080backend2.example.com:8080。然后,在虚拟主机的配置中,将所有请求都转发到这个上游服务器组上,实现了负载均衡的功能。

  1. 负载均衡配置
    • Nginx 提供了多种负载均衡算法,可以根据不同的需求进行选择。常见的负载均衡算法有轮询、加权轮询、IP 哈希等。
    • 以下是一个加权轮询负载均衡配置示例:

http {
    upstream backend {
        server backend1.example.com:8080 weight=3;
        server backend2.example.com:8080 weight=2;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;
        }
    }
}

  • 在这个配置示例中,定义了一个名为backend的上游服务器组,包含两个后端服务器backend1.example.com:8080backend2.example.com:8080。其中,backend1.example.com:8080的权重为 3,backend2.example.com:8080的权重为 2。Nginx 会根据权重的比例将请求分发到不同的后端服务器上,实现了加权轮询负载均衡的功能。

  1. 缓存配置
    • Nginx 可以作为缓存服务器,缓存后端服务器的响应内容,提高系统的性能和响应速度。
    • 以下是一个缓存配置示例:

http {
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_cache my_cache;
            proxy_pass http://backend;
        }
    }
}

  • 在这个配置示例中,定义了一个缓存路径/var/cache/nginx,并创建了一个名为my_cache的缓存区域。然后,在虚拟主机的配置中,将缓存区域应用到请求处理中,实现了缓存功能。Nginx 会将后端服务器的响应内容缓存到指定的缓存路径中,并根据配置的参数进行管理和清除。

四、Nginx 的常见应用场景

(一)静态文件服务

  1. 场景描述
    • 对于静态文件(如 HTML、CSS、JavaScript、图片等)的服务,Nginx 可以直接从磁盘上读取文件内容,并将文件内容返回给客户端。相比传统的 Web 服务器,Nginx 在处理静态文件时具有更高的性能和响应速度。
  2. 配置示例
    • 以下是一个用于静态文件服务的 Nginx 配置示例:

http {
    server {
        listen 80;
        server_name static.example.com;

        location / {
            root /var/www/static;
        }
    }
}

  • 在这个配置示例中,定义了一个虚拟主机,监听 80 端口,服务名为static.example.com。它将/var/www/static目录作为静态文件根目录,当客户端请求静态文件时,Nginx 会直接从这个目录中读取文件内容并返回给客户端。

(二)反向代理与负载均衡

  1. 场景描述
    • 在大型网站和应用中,通常会有多个后端服务器来处理请求。Nginx 可以作为反向代理服务器,将客户端的请求转发到后端的服务器上,并实现负载均衡功能,将请求均匀地分配到各个后端服务器上,提高系统的整体性能和可靠性。
  2. 配置示例
    • 以下是一个用于反向代理和负载均衡的 Nginx 配置示例:

http {
    upstream backend {
        server backend1.example.com:8080;
        server backend2.example.com:8080;
        server backend3.example.com:8080;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;
        }
    }
}

  • 在这个配置示例中,定义了一个名为backend的上游服务器组,包含三个后端服务器backend1.example.com:8080backend2.example.com:8080backend3.example.com:8080。然后,在虚拟主机的配置中,将所有请求都转发到这个上游服务器组上,实现了负载均衡的功能。Nginx 会根据配置的负载均衡算法将请求分发到不同的后端服务器上。

(三)高并发处理

  1. 场景描述
    • 在高并发的场景下,传统的 Web 服务器往往会因为无法处理大量的并发连接而出现性能瓶颈。Nginx 采用了事件驱动的异步非阻塞架构,能够高效地处理大量并发连接,适用于高并发的网站和应用。
  2. 配置示例
    • 以下是一些用于提高 Nginx 高并发处理能力的配置参数:

events {
    worker_connections 10240;
    use epoll;
}

http {
    keepalive_timeout 65;
    tcp_nodelay on;
    gzip on;
    open_file_cache max=100000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;
}

  • 在这个配置示例中,调整了 Nginx 的事件处理参数和 HTTP 相关参数,以提高其高并发处理能力。其中,worker_connections参数设置了每个工作进程的最大连接数,use epoll参数指定了使用 epoll 事件驱动模型,keepalive_timeout参数设置了长连接的超时时间,tcp_nodelay参数开启了 TCP_NODELAY 选项,以减少网络延迟,gzip on参数开启了 Gzip 压缩功能,以减少网络传输的数据量,open_file_cache参数设置了文件缓存的相关参数,以提高文件读取的性能。

(四)安全防护

  1. 场景描述
    • Nginx 可以作为安全防护的第一道防线,通过配置访问控制、IP 过滤、SSL/TLS 加密等功能,有效地保护网站和应用的安全。
  2. 配置示例
    • 以下是一些用于安全防护的 Nginx 配置示例:

收起

nginx

复制

http {
    # 访问控制
    location /admin {
        deny all;
    }

    location /api {
        allow 192.168.1.0/24;
        deny all;
    }

    # IP 过滤
    valid_referers none blocked *.example.com;
    if ($invalid_referer) {
        return 403;
    }

    # SSL/TLS 加密
    server {
        listen 443 ssl;
        server_name example.com;

        ssl_certificate /etc/nginx/ssl/example.crt;
        ssl_certificate_key /etc/nginx/ssl/example.key;

        location / {
            #...
        }
    }
}

  • 在这个配置示例中,通过location块实现了访问控制功能,禁止所有用户访问/admin目录,只允许来自192.168.1.0/24网段的用户访问/api目录。通过valid_referers指令和if语句实现了 IP 过滤功能,只允许来自特定域名的请求访问网站。通过server块实现了 SSL/TLS 加密功能,将网站的访问端口设置为 443,并指定了 SSL 证书和私钥的路径。

(五)缓存与加速

  1. 场景描述
    • 对于经常访问的静态资源和动态内容,Nginx 可以进行缓存,减少后端服务器的负载,提高响应速度。同时,Nginx 还可以通过压缩、优化缓存策略等方式进一步加速网站的访问。
  2. 配置示例
    • 以下是一个用于缓存和加速的 Nginx 配置示例:

http {
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off;

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_cache my_cache;
            proxy_pass http://backend;
        }

        location ~* \.(jpg|jpeg|png|gif|css|js)$ {
            expires 30d;
            add_header Cache-Control "public";
        }
    }
}

  • 在这个配置示例中,首先定义了一个缓存路径和缓存区域。然后,在虚拟主机的配置中,将缓存区域应用到所有请求上,并对特定的静态资源文件设置了较长的过期时间和缓存控制头,以实现缓存和加速的功能。

(六)动静分离

  1. 场景描述
    • 将动态内容和静态内容分别由不同的服务器处理,可以提高系统的性能和可维护性。Nginx 可以作为中间层,将静态资源的请求直接返回,而将动态资源的请求转发到后端的动态服务器上。
  2. 配置示例
    • 以下是一个用于动静分离的 Nginx 配置示例:

http {
    server {
        listen 80;
        server_name example.com;

        location /static/ {
            root /var/www/static;
        }

        location / {
            proxy_pass http://backend;
        }
    }
}

  • 在这个配置示例中,将以/static/开头的请求直接从/var/www/static目录中返回静态资源,而其他请求则转发到后端的动态服务器上。

五、Nginx 的高级功能

(一)模块开发与扩展

  1. Nginx 模块体系结构
    • Nginx 由多个模块组成,每个模块负责特定的功能。这些模块可以分为核心模块、事件模块、HTTP 模块、邮件模块等。开发者可以根据自己的需求开发自定义模块,扩展 Nginx 的功能。
  2. 开发自定义模块
    • 开发 Nginx 自定义模块需要掌握 C 语言编程和 Nginx 的内部结构。可以通过编写 C 代码实现新的功能,并将其编译到 Nginx 中。以下是一个简单的自定义模块示例:
#include <ngx_config.h>
#include <ngx_core.h>
#include <ngx_http.h>

static ngx_int_t ngx_http_myfilter_handler(ngx_http_request_t *r);

static ngx_http_module_t ngx_http_myfilter_module_ctx = {
    NULL,                                  /* preconfiguration */
    NULL,                                  /* postconfiguration */
    NULL,                                  /* create main configuration */
    NULL,                                  /* init main configuration */
    NULL,                                  /* create server configuration */
    NULL,                                  /* merge server configuration */
    NULL,                                  /* create location configuration */
    NULL                                   /* merge location configuration */
};

static ngx_command_t ngx_http_myfilter_commands[] = {
    { ngx_string("my_filter"),
      NGX_HTTP_LOC_CONF|NGX_CONF_NOARGS,
      ngx_http_myfilter_handler,
      0,
      0,
      NULL },
    ngx_null_command
};

ngx_module_t ngx_http_myfilter_module = {
    NGX_MODULE_V1,
    &ngx_http_myfilter_module_ctx,      /* module context */
    ngx_http_myfilter_commands,         /* module directives */
    NGX_HTTP_MODULE,                    /* module type */
    NULL,                               /* init master */
    NULL,                               /* init module */
    NULL,                               /* init process */
    NULL,                               /* init thread */
    NULL,                               /* exit thread */
    NULL,                               /* exit process */
    NULL,                               /* exit master */
    NGX_MODULE_V1_PADDING
};

static ngx_int_t ngx_http_myfilter_handler(ngx_http_request_t *r)
{
    ngx_buf_t *b;
    ngx_chain_t out;

    // 添加自定义的处理逻辑

    return NGX_OK;
}

  • 这个示例中,定义了一个名为ngx_http_myfilter_module的 Nginx HTTP 模块,实现了一个名为my_filter的指令。当 Nginx 处理 HTTP 请求时,如果遇到这个指令,就会调用ngx_http_myfilter_handler函数进行处理。可以在这个函数中添加自定义的处理逻辑,实现特定的功能。

(二)Nginx 与微服务架构

  1. Nginx 在微服务中的作用
    • 在微服务架构中,Nginx 可以作为 API 网关,实现请求的路由、负载均衡、安全防护等功能。它可以将外部请求转发到内部的微服务实例上,并对请求进行过滤和处理,提高系统的可扩展性和可靠性。
  2. 配置示例
    • 以下是一个用于微服务架构的 Nginx 配置示例:

http {
    upstream microservices {
        server microservice1.example.com:8080;
        server microservice2.example.com:8080;
    }

    server {
        listen 80;
        server_name api.example.com;

        location /service1/ {
            rewrite ^/service1/(.*)$ /$1 break;
            proxy_pass http://microservices;
        }

        location /service2/ {
            rewrite ^/service2/(.*)$ /$1 break;
            proxy_pass http://microservices;
        }
    }
}

  • 在这个配置示例中,定义了一个名为microservices的上游服务器组,包含两个微服务实例microservice1.example.com:8080microservice2.example.com:8080。然后,在虚拟主机的配置中,通过location块和rewrite指令实现了请求的路由功能,将不同的请求转发到相应的微服务实例上。

(三)Nginx 的高可用架构

  1. Nginx 高可用的实现方式
    • 为了保证 Nginx 的高可用性,可以采用主从模式、负载均衡模式等架构。主从模式中,一台 Nginx 服务器作为主服务器,另一台作为从服务器,当主服务器出现故障时,从服务器可以自动接管服务。负载均衡模式中,可以使用多个 Nginx 服务器组成一个集群,通过负载均衡器将请求分发到不同的服务器上。
  2. 配置示例
    • 以下是一个主从模式的 Nginx 高可用配置示例:

# 主服务器配置
http {
    upstream backend {
        server backend1.example.com:8080;
        server backend2.example.com:8080;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;
        }
    }
}

# 从服务器配置
http {
    upstream backend {
        server backend1.example.com:8080;
        server backend2.example.com:8080;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;
        }
    }
}

  • 在这个配置示例中,主从服务器的配置基本相同,都将请求转发到后端的服务器上。可以通过使用第三方工具(如 Keepalived)来实现主从服务器的切换,当主服务器出现故障时,从服务器可以自动接管服务,保证系统的高可用性。

六、Nginx 的性能优化

(一)优化 Nginx 的配置参数

  1. 调整工作进程数
    • 根据服务器的硬件资源和负载情况,调整 Nginx 的工作进程数。一般来说,可以将工作进程数设置为与服务器的 CPU 核心数相等或稍多一些。
  2. 优化连接处理方式
    • 调整worker_connections参数,设置每个工作进程的最大连接数。根据服务器的内存和负载情况,合理设置这个参数,以避免连接过多导致系统资源耗尽。
  3. 启用缓存和压缩
    • 启用 Nginx 的缓存功能,可以减少后端服务器的负载,提高响应速度。同时,启用 Gzip 压缩功能,可以减少网络传输的数据量,提高传输效率。
  4. 调整日志级别和存储方式
    • 根据实际需求,调整 Nginx 的日志级别,避免生成过多的日志信息,影响系统性能。同时,可以将日志存储到磁盘或其他存储设备上,避免占用过多的内存资源。

(二)使用硬件加速

  1. 利用多核处理器
    • Nginx 可以充分利用服务器的多核处理器,提高并发处理能力。可以通过调整worker_processes参数,将工作进程数设置为与服务器的 CPU 核心数相等或稍多一些,以充分利用多核处理器的性能。
  2. 使用 SSD 存储
    • 使用 SSD(固态硬盘)存储可以提高文件读取和写入的速度,从而提高 Nginx 的性能。可以将 Nginx 的日志文件、缓存文件等存储在 SSD 上,以提高系统的性能。
  3. 配置网络优化
    • 合理配置服务器的网络参数,如调整 TCP 缓冲区大小、启用 TCP 快速打开等,可以提高网络传输的效率,从而提高 Nginx 的性能。

(三)监控与调优

  1. 使用监控工具
    • 可以使用第三方监控工具(如 Nagios、Zabbix 等)对 Nginx 的性能进行监控,及时发现问题并进行调整。这些工具可以监控 Nginx 的连接数、请求处理时间、内存使用情况等指标,帮助管理员了解系统的运行状态。
  2. 进行性能测试
    • 使用性能测试工具(如 Apache JMeter、LoadRunner 等)对 Nginx 进行性能测试,模拟大量并发请求,测试系统的性能和稳定性。根据测试结果,调整 Nginx 的配置参数,优化系统的性能。
  3. 持续优化
    • Nginx 的性能优化是一个持续的过程,需要不断地监控和调整。随着系统的负载变化和业务需求的发展,需要及时调整 Nginx 的配置参数,以保证系统的性能和稳定性。

七、总结

Nginx 作为一款高性能的 Web 服务器和反向代理服务器,在互联网领域中发挥着重要的作用。本文详细介绍了 Nginx 的基础概念、安装与配置、常见应用场景、高级功能以及性能优化等方面的内容,并通过丰富的示例帮助读者更好地理解和应用 Nginx。通过掌握 Nginx 的使用,开发者可以构建出高效、可靠、安全的网站和应用,满足不断增长的业务需求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2234582.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【修订中】js 中apply call bind 用法

一、call、apply可以翻译成继承或者借调 区别&#xff1a;传参不同 可以调用函数可以改变函数中this的指向 二、js 语法词法&#xff1a; 普通函数 构造函数&#xff1a; 为什么不在构造函数中写方法 function Student(n, a) {this.uname n;this.age a;this.sayHi func…

Android15音频进阶之Cuttlefish搭建音频开发环境(九十二)

简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+…

【Unity】Unity拖拽在Android设备有延迟和卡顿问题的解决

一、介绍 在制作Block类游戏时&#xff0c;其核心的逻辑就是拖拽方块放入到地图中&#xff0c;这里最先想到的就是Unity的拖拽接口IDragHandler,然后通过 IPointerDownHandler, IPointerUpHandler 这两个接口判断按下和松手&#xff0c;具体的实现逻辑就是下面 public void On…

如何理解ETLCloud在iPaas中的关键角色

在当今的数字化时代&#xff0c;企业越来越依赖于其处理和分析数据的能力。为了实现这一目标&#xff0c;企业需要将各种异构的应用和数据源集成在一起&#xff0c;形成一个统一的数据视图。在这一过程中&#xff0c;ETL&#xff08;Extract, Transform, Load&#xff09;和iPa…

Linux多线程(个人笔记)

Linux多线程 1.Linux线程概念1.1线程的优点1.2线程的缺点 2.Linux线程VS进程3.Linux线程控制3.1创建线程3.2线程tid及进程地址空间布局3.3线程终止3.4线程等待 4.分离线程5.线程互斥5.1互斥锁mutex5.2互斥锁接口5.3互斥锁实现原理5.4可重入VS线程安全 6.线程同步6.1条件变量6.2…

【案例】故障雪花屏

开发平台&#xff1a;Unity 6.0 开发工具&#xff1a;Shader Graph 参考视频&#xff1a;【U2D Shader Graph】❄️雪❄️花❄️屏❄️   一、效果图 二、Shader Graph 路线图 三、案例分析 核心思路&#xff1a;雪花屏幕效果 &#xff08;混合&#xff09; 原图像 最终图像…

Hunyuan-Large:推动AI技术进步的下一代语言模型

腾讯近期推出了基于Transformer架构的混合专家&#xff08;MoE&#xff09;模型——Hunyuan-Large&#xff08;Hunyuan-MoE-A52B&#xff09;。该模型目前是业界开源的最大MoE模型之一&#xff0c;拥有3890亿总参数和520亿激活参数&#xff0c;展示了极强的计算能力和资源优化优…

arkUI:Column和Rom的间距设置(列向,横向)

arkUI&#xff1a;Column和Rom的间距设置&#xff08;列向&#xff0c;横向&#xff09; 1 主要内容说明2 相关内容举例和说明2.1 Column的间距&#xff08;列的间距&#xff09;2.1.1 源码1 &#xff08;Column的间距&#xff09;2.1.2 源码1运行效果 2.2 Row的间距&#xff0…

QML项目实战:自定义Combox

目录 一.添加模块 import QtQuick.Controls 2.4 import QtQuick.Templates 2.4 as T import QtGraphicalEffects 1.15 import QtQuick 2.15 as T2 二.自定义Combox 1.combox文字显示 2.设置下拉图标显示 3.下拉框中选中背景设置 4.下拉框中选中文字设置 5.下拉框设置…

【设计模式系列】原型模式(十一)

一、什么是原型模式 原型模式&#xff08;Prototype Pattern&#xff09;是一种创建型设计模式&#xff0c;它使得一个对象可以复制自身&#xff0c;从而创建一个与自己属性一致的新对象&#xff0c;而无需知晓对象创建的细节。这种模式允许动态地增加对象的数量&#xff0c;并…

h5web浏览器获取腾讯地图经纬度

https://lbs.qq.com/dev/console/application/mine 去腾讯地图申请key 然后前端页面引用 <script type"text/javascript" src"https://apis.map.qq.com/tools/geolocation/min?key自己的key&referertest"></script>调用代码 let geoloca…

微积分复习笔记 Calculus Volume 1 - 4.6 | Limits at Infinity and Asymptotes

4.6 Limits at Infinity and Asymptotes - Calculus Volume 1 | OpenStax

开源的flash浏览器 CelfFlashBrowser

特点 不用安装flash就可以玩flash游戏。 可播放在线和本地的swf文件 下载地址 &#xff1a;https://github.com/Mzying2001/CefFlashBrowser

游戏引擎中的颜色科学

游戏引擎中的渲染组件的作用是生成一个二维图片&#xff0c;在特定的时间从给定的视点观察的方向看到的一个三维空间的状态。他们的生成每一张图片都会被称为帧&#xff0c;他们生成的速度称为帧率。 像素 在每一帧中&#xff0c;游戏引擎的视觉输出基本上是一大堆彩色像素&a…

css中pointer-events:none属性对div里面元素的鼠标事件的影响

文章目录 前倾提要当没有设置属性pointer-events时候结果 当子元素设置了pointer-events: none修改后的代码结果如下所示 当父元素设置了pointer-events: none若两个div同级也就是兄弟级 前倾提要 在gis三维开发的地图组件上放一个背景图片&#xff0c;左右两侧的颜色渐变等&a…

中科蓝汛GPIO操作说明

概述 本篇文章介绍如何使用中科蓝汛AB5681&#xff0c;GPIO管脚使用说明。 一、第一种写法 1&#xff09;、GPIO配置输入模式 //内部上拉 GPIOBDE | BIT(4); //数字IO使能: 0为模拟IO, 1 为数字IO GPIOBDIR | BIT(4); //控制IO的方向: 0为输出, 1为输入. GPIOBFEN &…

Kotlin 协程使用及其详解

Kotlin协程&#xff0c;好用&#xff0c;但是上限挺高的&#xff0c;我一直感觉自己就处于会用&#xff0c;知其然不知其所以然的地步。 做点小总结&#xff0c;比较浅显。后面自己再继续补充吧。 一、什么是协程&#xff1f; Kotlin 协程是一种轻量级的并发编程方式&#x…

LabVIEW 离心泵机组故障诊断系统

开发了一套基于LabVIEW图形化编程语言设计的离心泵机组故障诊断系统。系统利用先进的数据采集技术和故障诊断方法&#xff0c;通过远程在线监测与分析&#xff0c;有效提升了离心泵的预测性维护能力&#xff0c;保证了石油化工生产的连续性和安全性。 项目背景及意义 离心泵作…

线程函数和线程启动的几种不同形式

线程函数和线程启动的几种不同形式 在C中&#xff0c;线程函数和线程启动可以通过多种形式实现。以下是几种常见的形式&#xff0c;并附有相应的示例代码。 1. 使用函数指针启动线程 最基本的方式是使用函数指针来启动线程。 示例代码&#xff1a; #include <iostream&g…

辐射传输方程的分解

Decomposition of the Boundary Value Problem for Radiative Transfer Equation of MODIS and MISR instruments 0.Notions Let L L L be the straming-collision operator, and S S S is scattering operator: L I Ω ⋅ ∇ I ( r , Ω ) σ ( r , Ω ) I ( r , Ω ) S…