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

nginx续1:

八、虚拟主机配置

基于域名的虚拟主机
[root@server2 ~]# ps -au|grep nginx              //查看进程
修改Nginx服务配置,添加相关虚拟主机配置如下
1.    [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
2.    .. ..
3.    server {
4.            listen       80;                                      //端口
5.            server_name  www.a.com;                            //域名
6.    auth_basic "Input Password:";                        //认证提示符
7.            auth_basic_user_file "/usr/local/nginx/pass";        //认证密码文件
8.    location / {
9.                root   html;                                    //指定网站根路径
10.                index  index.html index.htm;
11.           }
12.           
13.    }
14.    … …
15.    
16.        server {
17.            listen  80;                                        //端口
18.            server_name  www.b.com;                            //域名
19.    location / { 
20.    root   web;                                 //指定网站根路径
21.    index  index.html index.htm;
22.    }
[root@localhost ~]# mkdir /usr/local/nginx/web                       //创建网页根目录
[root@localhost ~]# echo "web" > /usr/local/nginx/web/index.html             //写测试页面
[root@localhost ~]# /usr/local/nginx/sbin/nginx -s reload       //重新加载
客户机测试:
[root@localhost ~]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.134   www.a.com www.b.com


九、nginx反向代理配置

⽤户直接访问反向代理服务器就可以获得⽬标服务器(后端服务器)的资源。

1、修改配置

在配置⽂件中添加⼀⾏反向代理块指令(proxy_pass),表示当访问本机地址 192.168.1.125的 80 端⼝时即可跳转到后端服务器 192.168.1.100 的 80 端⼝上。


[root@server2 ~]# vim /usr/local/nginx/conf/nginx.conf
    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://192.168.1.100:80;
        }
[root@server2 ~]# /usr/local/nginx/sbin/nginx -s reload


2、建立后端服务器

去server1:
也安装了nginx
[root@server1 ~]# vim /usr/local/nginx/html/index.html 
这里是192.168.1.100

3、访问测试

浏览器测试,输入server2的地址192.168.1.125

十、nginx访问IP黑名单

1、修改配置

[root@server2 ~]# vim /usr/local/nginx/conf/nginx.conf
    server {
        listen       80;
        server_name  localhost;
        allow 192.168.1.225;                 //允许192.168.1.225用户访问
        deny 192.168.1.0/24;               //拒绝1.0网段的用户访问
        deny all;                                    //拒绝所有,哪条在前哪条优先级高
        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            root   html;
            index  index.html index.htm;
            proxy_pass http://192.168.1.100:80;
        }
[root@server2 ~]# /usr/local/nginx/sbin/nginx -s reload

2、真机浏览器访问

因为当前服务器拒绝了 1.0 ⽹段的⽤户访问,⽽本机浏览器正是通过 1.254 ⽹关与服务器建⽴连接,所以浏览器被拒绝访问了,显示 403 错误信息。


3、另找一台虚拟机(192.168.1.225)访问

[root@web ~]# curl 192.168.1.125
我是192.168.1.100                  //访问成功

十一、负载均衡

1、环境准备

四台虚拟机都安装了nginx
staticserver  ip  192.168.1.250
server1         ip   192.168.1.100
server2         ip   192.168.1.125
server3         ip   192.168.1.225
写一下测试页面,便于区分
[root@staticserver ~]# echo "I am static server" > /usr/local/nginx/html/index.html 
[root@server1 ~]# echo "I am server1" > /usr/local/nginx/html/index.html 
[root@server2 ~]# echo "I am server2" > /usr/local/nginx/html/index.html
[root@server3 ~]# echo "I am server3" > /usr/local/nginx/html/index.html


2、配置,在staticserver里


[root@staticserver ~]# vim /usr/local/nginx/conf/nginx.conf
   upstream servers {                                       //#upstream模块要写到http的里面
                   server 192.168.1.100:80;
                   server 192.168.1.125:80;
                   server 192.168.1.225:80;
         }


    server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
#            root   html;
#            index  index.html index.htm;
        proxy_pass http://servers;              #通过proxy_pass将用户的请求转发给servers集群,他的语句优先级高于root,所以放root前面和后面都可以
[root@staticserver ~]# /usr/local/nginx/sbin/nginx -s reload

3、访问测试

真机浏览器访问staticserverIP192.168.1.250,可以看到另外三台主机的页面,点击刷新即可

4、配置upstream服务器集群池属性

1)七层负载均衡基础配置

2)负载均衡状态

在服务器组的组内服务器后填写该服务器的状态,如:

3)负载均衡策略

(1)轮询

(2)weight 加权

(3)ip_hash

当对后端的多台动态应用服务器做负载均衡时,ip_hash指令能够将某个客户端IP的请求通过哈希算法定位到同一台后端服务器上。
这样,当来自某一个IP的用户在后端Web服务器A上登录后,再访问该站点的其他URL,能保证其访问的还是后端web服务器A。
注意: 使用ip_hash指令无法保证后端服务器的负载均衡,可能导致有些后端服务器接收到的请求多,有些后端服务器接受的请求少,而且设置后端服务器权重等方法将不起作用。

(4)least_conn 

least_conn:最少连接,把请求转发给连接数较少的后端服务器。轮询算法是把请求平均地转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,leastconn这种方式就可以达到更好的负载均衡效果。

(5)url_hash

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,要配合缓存命中来使用。同一个资源多次请求,可能会到达不同的服务器上,导致不必要的多次下载,缓存命中率不高,以及一些资源时间的浪费。而使用ur_hash,可以使得同一个url (也就是同一个资源请求)会到达同一台服务器,一旦缓存住了资源,再次收到请求,就可以从缓存中读取。


十二、平滑升级(不停止服务的情况下)

[root@server1 ~]# /usr/local/nginx/sbin/nginx                    //先保证原有服务使启动的
[root@server1 ~]# wget https://nginx.org/download/nginx-1.27.0.tar.gz        //下载新版本
[root@server1 ~]# tar -zxvf nginx-1.27.0.tar.gz                         //解压 
[root@server1 nginx-1.27.0]# cd nginx-1.27.0/
[root@server1 nginx-1.27.0]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_realip_module --with-stream   //还是原来的位置
[root@server1 nginx-1.27.0]# make && make install
[root@server1 nginx-1.27.0]# ls /usr/local/nginx/sbin/
nginx  nginx.old
[root@server1 nginx-1.27.0]# /usr/local/nginx/sbin/nginx -v         //查看版本
nginx version: nginx/1.27.0 
[root@server1 nginx-1.27.0]# /usr/local/nginx/sbin/nginx.old -v          //旧版本
nginx version: nginx/1.26.1
[root@server1 nginx-1.27.0]# ps -aux|grep nginx             //查看进程,找到老版本pid编号
root       7838  0.0  0.2  46096  1144 ?        Ss   13:40   0:00 nginx: master process ./sbin/nginx
nginx      7839  0.0  0.4  46544  2152 ?        S    13:40   0:00 nginx: worker process
root      10940  0.0  0.2 112720   968 pts/2    R+   16:34   0:00 grep --color=auto nginx
[root@server1 nginx-1.27.0]# kill -USR2 7838          //使用kill -USR2 启用新版本的Nginx的软件,7838是老版本的pid编号
[root@server1 nginx-1.27.0]# ps -aux|grep nginx
root       7838  0.0  0.2  46096  1332 ?        Ss   13:40   0:00 nginx: master process ./sbin/nginx
nginx      7839  0.0  0.4  46544  2152 ?        S    13:40   0:00 nginx: worker process
root      10941  0.0  0.6  46096  3324 ?        S    16:37   0:00 nginx: master process ./sbin/nginx
nginx     10942  0.0  0.3  46548  1916 ?        S    16:37   0:00 nginx: worker process
root      10944  0.0  0.2 112720   964 pts/2    R+   16:37   0:00 grep --color=auto nginx
[root@server1 nginx-1.27.0]# kill -WINCH 7839                  //优雅关闭子进程
[root@server1 nginx-1.27.0]# ps -aux|grep nginx
root       7838  0.0  0.2  46096  1332 ?        Ss   13:40   0:00 nginx: master process ./sbin/nginx
root      10941  0.0  0.6  46096  3324 ?        S    16:37   0:00 nginx: master process ./sbin/nginx
nginx     10942  0.0  0.3  46548  1916 ?        S    16:37   0:00 nginx: worker process
nginx     10947  0.0  0.3  46544  1908 ?        S    16:39   0:00 nginx: worker process
root      10949  0.0  0.2 112720   964 pts/2    R+   16:39   0:00 grep --color=auto nginx
[root@server1 nginx-1.27.0]# kill -QUIT 7838                     //优雅关闭主进程
[root@server1 nginx-1.27.0]# ps -aux|grep nginx
root      10941  0.0  0.6  46096  3324 ?        S    16:37   0:00 nginx: master process ./sbin/nginx
nginx     10942  0.0  0.3  46548  1916 ?        S    16:37   0:00 nginx: worker process
root      10953  0.0  0.2 112720   968 pts/2    R+   16:40   0:00 grep --color=auto nginx
[root@server1 nginx-1.27.0]# curl -I localhost                   //使用curl 查看当前服务器的版本
HTTP/1.1 200 OK
Server: nginx/1.27.0                       //已经更新成1.27版本了
Date: Tue, 30 Jul 2024 08:41:05 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 13
Last-Modified: Tue, 30 Jul 2024 07:02:16 GMT
Connection: keep-alive
ETag: "66a88ff8-d"
Accept-Ranges: bytes

十三、nginx代理tomcat10

配置tomcat10 运行环境       tomcat9可以在jdk8的环境运行
tomcat10必须在jdk17以上的版本运行

1、jdk环境

[root@server1 ~]# tar -xf jdk-22_linux-x64_bin.tar.gz 
[root@server1 ~]# mv jdk-22.0.1/ /usr/local/jdk                 //把解压后的文件移动到/usr/local/jdk/方便管理配置
[root@server1 ~]# cd /usr/local/jdk/
[root@server1 jdk]# sed -i '$aexport JAVA_HOME=/usr/local/jdk/' /etc/profile
[root@server1 jdk]# sed -i '$aPATH=$JAVA_HOME/bin:$PATH' /etc/profile
[root@server1 jdk]# source /etc/profile                   //使配置文件生效
[root@server1 jdk]# java -version                    //查看版本
java version "22.0.1" 2024-04-16
Java(TM) SE Runtime Environment (build 22.0.1+8-16)
Java HotSpot(TM) 64-Bit Server VM (build 22.0.1+8-16, mixed mode, sharing)

2、安装tomcat10

[root@server1 ~]# tar -zxvf apache-tomcat-10.1.25.tar.gz              //解压tomcat
[root@server1 ~]# mv apache-tomcat-10.1.25 /usr/local/tomcat/                    //移动,方便管理
[root@server1 ~]# cd /usr/local/tomcat/
[root@server1 tomcat]# ls
[root@server1 tomcat]# /usr/local/tomcat/bin/startup.sh                   //启动
[root@server1 tomcat]# netstat -lnput|grep java
tcp6       0      0 127.0.0.1:8005          :::*                    LISTEN      2306/java           
tcp6       1      0 :::8080                 :::*                    LISTEN      2336/java              //代表启动成功
[root@server1 tomcat]# cd /usr/local/tomcat/logs                      //日志文件
[root@server1 logs]# ls
[root@server1 logs]# tail -f catalina.2024-08-01.log                           //查看
[root@server1 logs]# /usr/local/tomcat/bin/shutdown.sh         //停用
[root@server1 logs]# cd ..
[root@server1 tomcat]# cd webapps/
[root@server1 webapps]# ls                //每个目录就是一个项目
docs  examples  host-manager  manager  ROOT          //ROOT就是默认网页,使用192.168.1.100:8080直接访问的页面就是ROOT目录下的index.jsp,在实际开发中,我们可以将目录名称改为ROOT就可以直接发布
测试:
[root@server1 webapps]# mkdir /usr//local/tomcat/webapps/myweb
[root@server1 webapps]# vim /usr//local/tomcat/webapps/myweb/a.jsp
i am jsp

i am jsp

<%=3+4 %>


3、再准备这样的两台server2,server3

server1
[root@server1 ~]# echo "i am 1" > /usr/local/tomcat/webapps/ROOT/index.jsp 
server2
[root@server2 ~]# echo "i am 2" > /usr/local/tomcat/webapps/ROOT/index.jsp 
server3
[root@server2 ~]# echo "i am 3" > /usr/local/tomcat/webapps/ROOT/index.jsp 


4、准备一台nginx服务器

[root@staticserver ~]# cd /usr/local/nginx/
[root@staticserver nginx]# ls
client_body_temp  conf  fastcgi_temp  html  logs  proxy_temp  sbin  scgi_temp  uwsgi_temp
[root@staticserver nginx]# mkdir conf.d
[root@staticserver nginx]# vim conf.d/eleme.conf
    server{
        listen            80;
        server_name        www.eleme.com;
        root            /eleme;
        location / {
            proxy_pass    elgroup;
        }
    }

[root@staticserver nginx]# vim /usr/local/nginx/conf/nginx.conf
   upstream elgroup {
                   server 192.168.1.100:8080;
                   server 192.168.1.125:8080;
                   server 192.168.1.225:8080;
         }
    include        /usr/local/nginx/conf.d/*.conf;


[root@staticserver nginx]# /usr/local/nginx/sbin/nginx -s reload
[root@staticserver nginx]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.250 www.eleme.com

浏览器访问测试:www.eleme.com,刷新即可看到页面轮询效果

相关文章:

nginx续1:

八、虚拟主机配置 基于域名的虚拟主机 [rootserver2 ~]# ps -au|grep nginx //查看进程 修改Nginx服务配置&#xff0c;添加相关虚拟主机配置如下 1. [rootproxy ~]# vim /usr/local/nginx/conf/nginx.conf 2. .. .. 3. server { 4. listen …...

循环队列和阻塞有什么关系?和生产者消费者模型又有什么关系?阻塞队列和异步日志又有什么关系

### 循环队列和阻塞队列 #### 循环队列 - **定义**: 一个固定大小的数组&#xff0c;通过两个指针&#xff08;front 和 back&#xff09;管理队列的头部和尾部元素。 - **特点**: - **循环性**: 当指针到达数组的末尾时&#xff0c;可以回绕到数组的开头&#xff0c;从而利…...

物理笔记-八年级上册

0.梦开始的地方 物理研究什么&#xff1f; 电学&#xff0c;力学&#xff0c;声学&#xff0c;光学&#xff0c;热学。 1.1.1长度的单位 国际基本单位制 单位转换 魔法记忆&#xff1a;千米-米-毫米-微米-纳米&#xff08;进率都是1000&#xff09; 单位换算计算方法 用科学…...

QT键盘和鼠标事件

这些事件都在QWidget 中的保护成员方法中 都是虚函数在头文件中声明了 需要类外重现实现 如果头文件中声明 类外无实现就会报错 void Widget::keyPressEvent(QKeyEvent *event) {switch (event->key()) {//获取按键case Qt::Key_W://按键wqDebug()<<"按下w"…...

文件Io编程基础

1. 标准I/O (stdio.h) stdio.h 是标准C库的头文件&#xff0c;包含了输入输出函数的声明。位置&#xff1a;/usr/include/stdio.h 2. 文件I/O操作步骤 打开文件: 使用 fopen 函数&#xff0c;返回 FILE* 指针。读/写操作: 使用 fread、fwrite、fgets、fputs、fprintf、fscan…...

本地项目提交到Gitee

在项目目录 右键 git bash here 可以在黑屏输入命令 也可以在项目里面 命令都是一样的 要排除哪些 git add . 添加所有文件 git commit -m "Initial commit" 提交到本地 git remote add origin https://gitee.com/xxxx/xxxx.git 添加远程仓库 …...

有了谷歌账号在登录游戏或者新APP、新设备时,要求在手机上点击通知和数字,怎么办?

有的朋友可能遇到过&#xff0c;自己注册或购买了谷歌账号以后&#xff0c;在自己的手机上可以正常登录&#xff0c;也完成了相关的设置&#xff0c;看起来一切都很完美&#xff0c;可以愉快地玩耍了。 但是&#xff0c;随后要登录一个游戏的时候&#xff08;或者登录一个新的…...

rsyslog如何配置日志轮转

以下是在 Linux 系统中配置 rsyslog 日志轮转策略的一般步骤&#xff1a; 编辑 rsyslog 的配置文件&#xff0c;通常为 /etc/rsyslog.conf 或 /etc/rsyslog.d/*.conf 。 在配置文件中添加类似以下的日志轮转配置示例&#xff1a; $template myLogs,"/var/log/mylog-%Y%m%d…...

LLM推理入门实践:基于 Hugging Face Transformers 和 Qwen2模型 进行文本问答

文章目录 1. HuggingFace模型下载2. 模型推理&#xff1a;文本问答 1. HuggingFace模型下载 模型在 HuggingFace 下载&#xff0c;如果下载速度太慢&#xff0c;可以在 HuggingFace镜像网站 或 ModelScope 进行下载。 使用HuggingFace的下载命令&#xff08;需要先注册Huggin…...

python:YOLO格式数据集图片和标注信息查看器

作者&#xff1a;CSDN _养乐多_ 本文将介绍如何实现一个可视化图片和标签信息的查看器&#xff0c;代码使用python实现。点击下一张和上一张可以切换图片。 文章目录 一、脚本界面二、完整代码 一、脚本界面 界面如下图所示&#xff0c; 二、完整代码 使用代码时&#xff0…...

AGI思考探究的意义、价值与乐趣 Ⅴ

搞清楚模型对知识或模式的学习与迁移对于泛化意味什么&#xff0c;或者说两者间的本质&#xff1f;相信大家对泛化性作为大语言模型LLM的突出能力已经非常了解了 - 这也是当前LLM体现出令人惊叹的通用与涌现能力的基础前提&#xff0c;这里不再过多赘述&#xff0c;但仍希望大家…...

c++: mangle命名规则

其实可用根据binutils/c++filt的源代码看。找到mangle的命名规则, 但是从网上找到了一个总结,但是github有时候上不去,摘录再次。 https://github.com/gchatelet/gcc_cpp_mangling_documentation https://itanium-cxx-abi.github.io/cxx-abi/abi.html#mangling 举例: _ZN8…...

系统化学习 H264视频编码(05)码流数据及相关概念解读

说明&#xff1a;我们参考黄金圈学习法&#xff08;什么是黄金圈法则?->模型 黄金圈法则&#xff0c;本文使用&#xff1a;why-what&#xff09;来学习音H264视频编码。本系列文章侧重于理解视频编码的知识体系和实践方法&#xff0c;理论方面会更多地讲清楚 音视频中概念的…...

【VMware】如何演示使用U盘在VMware虚拟机上安装Windows11

一、前置准备 在开始使用U盘演示在VMware虚拟机上装Windows11前&#xff0c;我们需要做以下前置的准备&#xff1a; 已制作好的Windows引导盘&#xff1b;WMware软件 如何制作Windows引导盘&#xff1f; 推荐参考&#xff1a; 【建议收藏】2024年最新Windows系统重装教程&…...

HanLP和Jieba区别

HanLP和Jieba都是中文分词工具&#xff0c;但它们在多个方面存在区别。以下是对两者区别的详细分析&#xff1a; 一、开发背景与语言支持 HanLP&#xff1a;由大连理工大学自然语言处理与社会人文计算实验室开发&#xff0c;是一个开源的自然语言处理工具包。它主要使用Java语…...

荒原之梦考研:考研二战会很难吗?

考研二战是不是很难&#xff0c;其实很大程度上取决于我们自己&#xff0c;我们能否认清自己的优势&#xff0c;能否指定和执行合理的计划&#xff0c;有没有强大的心理支撑等&#xff0c;都是决定考研二战能否成功&#xff0c;或者能否比较轻松的成功的关键。 在本文中&#…...

【Git企业级开发实战指南①】Git安装、基本操作!

目录 一、Git是什么&#xff1f;1.1特点1.2功能1.3基本概念 二、Git安装2.1Ubuntu下安装2.2Centos下安装Git 三、Git基本操作3.1创建git本地仓库3.2配置Git3.3 工作区&暂存区&版本库3.4 实操案例3.4.1添加文件 3.5 修改文件3.6版本回退3.7查看历史操作日志3.7撤销修改3…...

Leetcode 3239. Minimum Number of Flips to Make Binary Grid Palindromic I

Leetcode 3239. Minimum Number of Flips to Make Binary Grid Palindromic I 1. 解题思路2. 代码实现 题目链接&#xff1a;3239. Minimum Number of Flips to Make Binary Grid Palindromic I 1. 解题思路 这一题思路上的话就是分别考察一下把所有行都变成回文所需要的fli…...

C++面试基础算法的简要介绍

C是一种广泛使用的编程语言&#xff0c;尤其在算法和数据结构的实现中占据重要地位。以下是对C基础算法的一些介绍&#xff0c;涵盖了排序、查找、搜索算法以及基本的遍历算法等方面。 排序算法 快速排序&#xff08;Quick Sort&#xff09; 快速排序是一种分而治之的排序算法…...

【Linux网络编程】套接字Socket(UDP)

网络编程基础概念&#xff1a; ip地址和端口号 ip地址是网络协议地址&#xff08;4字节32位&#xff0c;形式&#xff1a;xxx.xxx.xxx.xxx xxx在范围[0, 255]内&#xff09;&#xff0c;是IP协议提供的一种统一的地址格式&#xff0c;每台主机的ip地址不同&#xff0c;一个…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

STM32标准库-DMA直接存储器存取

文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA&#xff08;Direct Memory Access&#xff09;直接存储器存取 DMA可以提供外设…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...

上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式

简介 在我的 QT/C 开发工作中&#xff0c;合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式&#xff1a;工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...

xmind转换为markdown

文章目录 解锁思维导图新姿势&#xff1a;将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件&#xff08;ZIP处理&#xff09;2.解析JSON数据结构3&#xff1a;递归转换树形结构4&#xff1a;Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...