深入探索HAProxy:高性能负载均衡器的奥秘

目录

引言

一、HAProxy基础知识

(一)HAProxy概述

(二)核心特性

(三)支持调度算法

二、安装haproxy

(一)下载源码包

(二)解决依赖环境

(三)编译安装

(四)配置system管理文件

(五)配置文件介绍

1.全局设置(global)

2.默认参数(defaults)

3.监听设置(listen)

三、haproxy调优

(一)进程

(二)cpu亲缘性

(三)状态页

(四)日志管理

1.本地日志

2.远端日志

四、Proxies配置

(一)defaults配置

(二)frontend与backend

1.基本服务

2.开启健康性检测

(三)listen配置


引言

在现今互联网服务中,面对日益增长的用户访问量和数据流量,保证服务的稳定性和高效性成为了至关重要的挑战。而作为一款强大的开源软件负载均衡器,HAProxy(High Availability Proxy)凭借其出色的性能、高可用性和灵活性,在众多网络架构中扮演着不可或缺的角色

一、HAProxy基础知识

(一)HAProxy概述

HAProxy是一款基于事件驱动、单进程模型设计的四层与七层负载均衡器,它能够在TCP/UDP层面以及HTTP(S)等应用层协议上实现高效的流量分发。HAProxy不仅适用于Web服务器负载均衡,还能应用于数据库、邮件服务器、缓存服务器等多种场景,支持高达数百万级别的并发连接,并具有极低的延迟。

(二)核心特性

高性能负载均衡: HAProxy通过优化的事件驱动引擎,能够以最小的系统资源开销处理大量并发请求。它支持多种负载均衡算法,如轮询、最少连接、源IP哈希等,可根据实际业务需求灵活配置。

健康检查与故障恢复: HAProxy具备完善的后端服务器健康检查机制,可以根据响应时间、错误率等因素自动剔除不健康的后端节点,并在节点恢复时重新将其加入到服务池中,确保服务连续性。

会话保持与亲和性: 为了保证用户的会话一致性,HAProxy支持基于cookie或源IP地址的会话保持功能,确保同一客户端的请求被转发到同一台后端服务器进行处理。

安全性与SSL卸载: HAProxy支持SSL/TLS加密传输,可对HTTPS流量进行解密并透明地分发至后端服务器,同时也能终止SSL连接以减轻服务器的加密计算压力。

高级路由与策略: 根据HTTP请求头、URL路径、内容类型等条件,HAProxy可以执行复杂的路由规则和ACL策略,使得负载均衡更加智能化和精准化。

日志记录与监控: HAProxy提供丰富的日志记录选项,可通过syslog、CSV格式输出等方式收集统计数据,便于运维人员实时监控系统状态和性能指标

(三)支持调度算法

官方文档:HAProxy version 2.4.15 - Configuration Manual

静态调度算法:不管后端,按照调度器的算法进行 分配

动态调度算法:会考虑后端服务器的负载情况

(1) roundrobin,表示简单的轮询 rr

(2) static-rr,表示根据权重

(3) leastconn,表示最少连接者先处理

( 4) source,表示根据请求源IP

(5) uri,表示根据请求的URI,做cdn需使用;

(6) url param,表示根据请求的URl参数' balance url param’requires an URL parameter name

(7) hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;

(8) rdp-cookie (name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。

二、安装haproxy

(一)下载源码包

本地yum源的版本比较老旧,可以从官方下载较新版本的源码包进行编译安装

官方链接:HAProxy - The Reliable, High Perf. TCP/HTTP Load Balancer

将源码包解压后,可以看到,与之前的nginx、php等编译安装不同,它没有configure执行文件

configuse执行文件主要生成的是Makefile文件,解压完源码包后就已经生成了该文件。

可以查看INSTALL文件,查看如何安装

make clean
#清除之前编译过程中产生的目标文件和临时文件,确保从一个干净的状态开始新的编译过程。make -j $(nproc) TARGET=linux-glibc USE_OPENSSL=1 USE_LUA=1 USE_PCRE=1 USE_SYSTEMD=1-j $(nproc) 
#使用系统的逻辑处理器数量同时进行编译,以加快编译速度。TARGET=linux-glibc 
#指定目标平台为基于glibc的Linux系统。USE_OPENSSL=1 
#启用OpenSSL库支持,使得软件可以利用OpenSSL提供的加密和安全功能。USE_LUA=1 
#启用Lua脚本语言支持,允许在软件中编写和运行Lua脚本来扩展功能。USE_PCRE=1 
#启用PCRE(Perl Compatible Regular Expressions)库支持,提供强大的正则表达式处理能力。USE_SYSTEMD=1
#启用Systemd支持,使软件能够更好地与Systemd初始化系统集成,例如注册systemd服务等。sudo make install
#完成编译后,使用管理员权限执行此命令将编译好的软件安装到系统预设的安装路径下。

在安装之前,需要解决依赖环境的问题

(二)解决依赖环境

1.安装编译环境

yum -y install gcc openssl-devel pcre-devel systemd-devel

由于CentOS7 之前版本自带的lua版本比较低并不符合HAProxy要求的lua最低版本(5.3)的要求,因此需要编译安装较新版本的lua环境,然后才能编译安装HAProxy

下载方法在官方文档:Lua: download

2.安装LUA


 

(三)编译安装

make ARCH=x86_64
#指定要构建的目标处理器架构为x86_64,即适用于64位Intel/AMD处理器的版本。TARGET=linux-glibc
#设置目标平台为基于glibc的Linux系统,glibc是Linux系统中最常用的C语言标准库实现。USE_PCRE=1
#启用PCRE支持,这将允许软件使用复杂的正则表达式进行匹配和处理。USE_OPENSSL=1
#启用OpenSSL支持,提供加密算法、SSL/TLS协议等功能。USE_ZLIB=1
#启用Zlib支持,用于数据压缩和解压缩功能。USE_SYSTEMD=1
#启用Systemd支持USE_LUA=1
#启用Lua脚本语言支持,允许在软件中编写和运行Lua脚本来扩展功能。LUA_INC=/usr/local/lua/src/
#指定Lua头文件目录,编译时需要用到这些头文件来链接到Lua库。LUA_LIB=/usr/local/lua/src/
#指定Lua库文件目录,编译时会链接到这个目录下的库文件以支持Lua功能

(四)配置system管理文件

需要在/usr/lib/systemd/system/目录下建立管理文件

Description=HAProxy Load Balancer
#这一行定义了服务的简要描述,说明该服务是用于提供负载均衡功能的HAProxy
After=syslog.target network.target
#表示此服务在syslog日志系统和网络服务完全启动之后开始启动。[Service]   #服务部分包含了与服务运行相关的各种设置。ExecStartPre=/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg  -c -q
#指定服务启动前执行haproxy命令。表示启动HAProxy前检查配置文件/etc/haproxy/haproxy.cfg 
#是否有效,-c表示仅检查配置文件,-q表示静默模式,不输出多余信息。
#该文件需要手动建立并配置信息。  
'具体信息在下一目录介绍'ExecStart=/usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /var/lib/haproxy/haproxy.pid
#执行haproxy命令,并指定配置文件路径为 /etc/haproxy/haproxy.cfg,
#-Ws:表示以守护进程模式运行并打开Unix套接字以便进行管理操作,
#同时将PID写到/var/lib/haproxy/haproxy.pid 文件中。该文件也需要手动创建ExecReload=/bin/kill -USR2 $MAINPID
#设置当服务收到reload信号时需要执行的操作,这里是发送USR2信号给主进程($MAINPID),
#使得haproxy能够平滑重载配置文件而无需停止服务。LimitNOFILE=100000
#服务的最大打开文件数量限制为100000[Install]
#安装部分定义了如何将此服务与系统的启动目标关联WantedBy=multi-user.target
#表明该服务应随多用户目标启动,即在系统进入多用户模式时自动启动haproxy服务

建立system管理时需要加载的文件,及相关配置信息

建立完毕后,启动服务:systemctl  enable  --now  haproxy

(五)配置文件介绍

编译安装完毕后。它的默认配置文件位置是源码包目录下的examples/option-http_proxy.cfg文件

而在system管理文件中并没有加载此目录,而是指向了/etc/haproxy/haproxy.cfg,新建的文件,便于自定义信息。

1.全局设置(global)

global            #全局,表示该段信息为全局配置
maxconn 100000    #置全局的最大并发连接数为100000
chroot /usr/local/haproxy  
#使运行中的haproxy进程被限制在/usr/local/haproxy目录下,以增强安全性。stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
#创建一个Unix套接字用于本地管理统计信息,权限为0600,只允许管理员访问。uid 99   gid 99   #设置HAProxy进程运行时的用户ID和组ID
daemon           #使haproxy以守护进程模式运行于后台。
pidfile /var/lib/haproxy/haproxy.pid
log 127.0.0.1 local3 info
#定义日志记录,将日志信息发送到本地IP地址127.0.0.1,并使用syslog标识符local3,
#记录级别为info以上的日志信息

2.默认参数(defaults)

defaults                    #定义默认的参数设置
option http-keep-alive      #用HTTP长连接支持
option  forwardfor          #开启X-Forwarded-For头部的插入
maxconn 100000              #设置每个frontend或backend的最大并发连接数为100000
mode http                   #指定默认的模式为HTTP
timeout connect 300000ms    #设置建立连接超时时间为300秒
timeout client  300000ms    #设置客户端超时时间也为300秒
timeout server  300000ms    #置后端服务器超时时间同样为300秒

3.监听设置(listen)

listen stats            #监听范围mode http              #设置监听器的工作模式为HTTP。bind 0.0.0.0:9999      #将监听器绑定到所有网络接口的9999端口,用于接收外部请求。stats enable           #启用统计信息收集和展示功能,允许通过HTTP访问查看自身状态信息log global             #使用全局日志设置记录与该监听器相关的活动stats uri     /status  #设置访问统计信息页面的URI路径为/status。stats auth    hauser:123456
#配置基本的HTTP身份验证,用户名为 hauser密码为 123456
#这意味着只有知道此凭据的用户才能访问统计信息。listen  web_portbind 0.0.0.0:8899   #创建另一个监听器并将其绑定到所有网络接口的8899端口,对外提供服务mode http           #设置该监听器也以HTTP模式工作。log global          #使用全局日志设置记录与该监听器相关的活动

三、haproxy调优

(一)进程

服务启动以后,可以看到默认开启一个主进程,带一个工作进程以及三个线程

可以根据cpu个数来决定开机时启动的work进程数量:在全局配置中添加nbproc参数

nbproc   n     #开启的haproxy work 进程数,默认进程数是一个

重启之后打开的工作进程就是设置的数量

(二)cpu亲缘性

CPU亲缘性(CPU Affinity)是指将进程或线程绑定到特定的CPU核心上运行的技术。通过设置CPU亲缘性,可以避免进程在不同核心之间频繁迁移,从而减少缓存失效、上下文切换等开销,提高系统的整体性能和效率

通过添加cpu-map参数将工作进程与cpu绑定:cpu-map n(work)  n(cpu)

重启服务后可以看到工作进程与CPU进行了绑定

这样设置后,haproxy的工作进程将会在指定的核心上运行,有利于优化并行处理能力和减少资源竞争。使得每个进程都在固定的核心上执行,有助于提升数据包处理的稳定性和一致性,尤其在多核处理器环境中更为重要。当然,实际应用时需要根据具体的硬件环境和负载情况合理配置CPU亲缘性。

(三)状态页

可以通过http服务来查看状态页,在写配置文件时就已经添加好了

使用浏览器进行访问

可以看到服务的一些状态信息,所以需要妥善保管密码

(四)日志管理

1.本地日志

haproxy服务没有单独的日志管理文件,它的默认日志文件位置在/var/log/messages

由于该文件的日志信息相对比较重要,建议单独存放

在配置文件的第14行已经定义的日志的格式,只需要在rsyslog日志管理的配置文件中指定信息即可

取消/etc/rsyslog.conf文件中的15,16行的注释信息

$ModLoad imudp: 这是在rsyslog配置文件中加载UDP模块的命令。imudp表示输入模块(Input Module)用于处理UDP协议的数据。通过此命令,系统将能够监听并接收通过UDP端口发送过来的日志消息。

$UDPServerRun 514: 这个指令告诉rsyslog服务在指定的UDP端口(这里为514)上启动一个UDP服务器以监听日志事件。默认情况下,许多网络设备和服务会使用514端口通过UDP协议发送syslog日志信息给日志收集服务器

在第74行添加日志配置

修改完毕后,重启服务:systemctl restart haproxy.service rsyslog.service

重启完毕后,会在/var/log/目录下自动生成日志文件

2.远端日志

由于haproxy服务只能做代理服务,对资源消耗较大,建议将日志文件放在远程的日志文件服务器上,专门建立日志文件查看

在haproxy服务的配置文件中,首先定义日志的标识符及信息

修改完毕后重启服务:systemctl restart  haproxy.service

在远端服务器上设置同样修改rsyslog日志管理服务的配置文件

有访问时,日志就会记录在该文件中,想要把只记录在远端服务去,只需要把haproxy服务器中的日志配置删除即可

四、Proxies配置

Proxies"配置通常是指对网络流量进行负载均衡和管理的代理设置。具体选项有以下几种:

defaults [<name>]

#默认配置项,针对以下的frontend、backend和listen生效,可以多个name也可以没有name
frontend <name>   

#前端servername,类似于Nginx的一个虚拟主机 server和LVS服务集群。frontend是haproxy接收客户端请求的地方,它定义了对外暴露的服务端口、协议以及处理请求的方式。
backend <name>   

#后端服务器组,等于nginx的upstream和LVS中的RS服务器

#Backend包含了实际提供服务的一组服务器,haproxy会根据预设的负载均衡算法将来自前#端的请求分发到这些后端服务器上。

listen  <name>   

#将frontend和backend合并在一起配置,相对于frontend和backend配置更简洁,生产常用

官方文档:HAProxy version 2.1.12 - Configuration Manual

(一)defaults配置

defaults配置基本为一些调优选项

option redispatch                

#当server Id对应的服务器挂掉后,强制定向到其他健康的服务器,重新派发
option abortonclose               

#当服务器负载很高时,自动结束掉当前队列处理比较久的连接,针对业务情况选择开启
option http-keep-alive               #开启与客户端的会话保持
option forwardfor                      #透传客户端真实IP至后端web服务器
mode http|tcp                            #设置默认工作类型,使用TCP服务器性能更好,减少压力
timeout http-keep-alive 120s     

#session 会话保持超时时间,此时间段内会转发到相同的后端服务器
timeout connect 120s             

#客户端请求从haproxy到后端server最长连接等待时间(TCP连接之前),默认单位ms
timeout server 600s           

 #客户端请求从haproxy到后端服务端的请求处理超时时长(TCP连接之后),默认单位ms,如#果超时,会出现502错误,此值建议设置较大些,访止502错误
timeout client 600s             

#设置haproxy与客户端的最长非活动时间,默认单位ms,建议和timeout server相同
timeout check   5s                              #对后端服务器的默认检测超时时间
default-server inter 1000 weight 3   #指定后端服务器的默认设置

(二)frontend与backend

1.基本服务

frontend与backend定义了haproxy服务的反向代理与负载均衡

在配置文件中添加frontend与backend语句块

frontend 
#定义了一个名为 "apache" 的前端代理,它监听来自客户端的请求。bind 192.168.83.40:80 
#表示该前端代理将绑定到IP地址为 192.168.83.40 的服务器上的80端口,对外提供HTTP服务。use_backend web
#指定当接收到请求时,应将请求转发到名称为 "web" 的后端集群进行处理。backend web 
#定义了一个名为 "web" 的后端集群server rs1 192.168.83.30:80 和 server rs2 192.168.83.50:80 
#分别定义了两台后端服务器。其中,rs1 对应的实际服务器IP地址是 192.168.83.30,
#并且在该服务器上运行的服务也监听80端口;同样地,rs2 对应的服务器IP地址是 192.168.83.50。

修改完毕后重启服务:systemctl restart  haproxy.servic

开服后端服务器

使用客户端进行访问

2.开启健康性检测

当一台服务器意外掉线后,haproxy并不能自动进行健康性检测

需要手动在backend后端语句块中添加check开启

添加完毕后重启服务:systemctl restart  haproxy.service

再去访问就会自动过滤不在线的后端服务器

(三)listen配置

listen 配置块是用于定义虚拟服务(Virtual Service)或前端代理(Frontend)。这个配置项结合了frontend和backend的概念,可以简化配置并集中管理同一逻辑服务的所有相关设置

在配置文件中将frontend和backend删除,防止端口与地址冲突,再去配置listen语句

listen web
#创建一个名为 "web" 的监听器,这个监听器将处理相关的网络流量。bind 192.168.83.40:80
#绑定到IP地址为 192.168.83.40(本机)的服务器上的80端口,以接收HTTP请求。mode http
#设置工作模式为HTTP,在defaults配置中已经设置完毕,在此可以不用添加log global
#在全局配置中定义了日志参数,该监听器使用全局日志设置记录与该监听器相关的活动server rs1 192.168.83.30:80 check inter 3000 fall 2 rise 5
#定义后端服务器rs1,其IP地址为 192.168.83.30 并且监听80端口。
#check:启用健康检查健康
#inter 3000:检查间隔时间为30秒 (默认单位为ms毫秒)。
#fall 2:表示如果服务器在两次连续的健康检查中失败,则标记为不可用
#rise 5:而当服务器在连续5次健康检查中成功响应,则恢复其为可用状态server rs2 192.168.83.50:80 check inter 3000 fall 2 rise 5
#原理同上一个后端服务器

使用客户端进行访问,同样达到了反向代理与负载均衡的效果

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CAP告诉你系统没法做到完美,只能做到权衡和适当

一、CAP介绍 CAP原理&#xff0c;全称为Consistency&#xff08;一致性&#xff09;、Availability&#xff08;可用性&#xff09;和Partition tolerance&#xff08;分区容错性&#xff09;&#xff0c;是分布式系统设计中的基本原理。它强调了在设计分布式系统时&#xff0c…

【Linux】第四十二站:线程局部存储与线程分离

一、线程的局部存储 1.实现多线程 如果我们想创建多线程&#xff0c;我们可以用下面的代码类似去实现 #include <iostream> #include <pthread.h> #include <string> #include <cstdlib> #include <unistd.h> #include <thread> #inclu…

【机器学习】进阶学习:详细解析Sklearn中的MinMaxScaler---原理、应用、源码与注意事项

【机器学习】进阶学习&#xff1a;详细解析Sklearn中的MinMaxScaler—原理、应用、源码与注意事项 这篇文章的质量分达到了97分&#xff0c;虽然满分是100分&#xff0c;但已经相当接近完美了。请您耐心阅读&#xff0c;我相信您一定能从中获得不少宝贵的收获和启发~ &#x1f…

PromptBreeder---针对特定领域演化和发展提示词的方法

原文地址&#xff1a;promptbreeder-evolves-adapts-prompts-for-a-given-domain 论文地址&#xff1a;https://arxiv.org/pdf/2309.16797.pdf 2023 年 10 月 6 日 提示方法分为两大类 硬提示是由人工精心设计的文本提示&#xff0c;包含离散的输入令牌&#xff1b;其缺点…

如何保证 redis 的高并发和高可用?redis 的主从复制原理能介绍一下么?redis 的哨兵原理能介绍一下么?

目录 一、面试官心理分析 二、面试题剖析 1.Redis 主从架构 2.Redis replication 的核心机制 3.Redis 主从复制的核心原理 4.主从复制的断点续传 5.无磁盘化复制 6.过期 key 处理 7.复制的完整流程 8.全量复制 9.增量复制 10.heartbeat 11.异步复制 12.Redis 如何…

鸿蒙OS应用开发之显示图片组件11

前面学习了像素降级处理的方法,这样方便一个图片可以显示在不同大小屏幕的技术,同样不会失真。现在来学习另外一个重要的技术,就是图片处理。图片处理是一个很范的名词,一般来说图片处理都会采用预处理的方法,比如在电脑上采用图形处理软件进行处理,然后再使用到手机的软…

校园小情书微信小程序,社区小程序前后端开源,校园表白墙交友小程序

功能 表白墙卖舍友步数旅行步数排行榜情侣脸漫画脸个人主页私信站内消息今日话题评论点赞收藏 效果图

JS实现chatgpt数据流式回复效果

最近高了一个简单chatgpt对话功功能&#xff0c;回复时希望流式回复&#xff0c;而不是直接显示结果&#xff0c;其实很简单&#xff0c;前端流式读取即可&#xff0c;后端SSE实现流式传输 前端用到fetch获取数据&#xff0c;然后利用reader读取 let requestId parseInt(Ma…

章六、集合(1)—— 概念、API、List 接口及实现类、集合迭代

零、 关闭IDEA调试时自动隐藏空元素 一、 集合的概念 存储一个班学员信息&#xff0c;假定一个班容纳20名学员 当我们需要保存一组一样&#xff08;类型相同&#xff09;的元素的时候&#xff0c;我们应该使用一个容器来存储&#xff0c;数组就是这样一个容器。 数组有什么缺…

CentOS7 利用remi yum源安装php8.1

目录 前言remi yum源remi yum源 支持的操作系统remi yum源 支持的php版本 安装epel源安装remi源安装 php8.1查看php版本查看php-fpm服务启动php-fpm服务查看php-fpm服务运行状态查看php-fpm服务占用的端口查看 php8.1 相关的应用 前言 CentOS Linux release 7.9.2009 (Core) …

GO语言接入支付宝

GO语言接入支付宝 今天就go语言接入支付宝写一个教程 使用如下库&#xff0c;各种接口较为齐全 "github.com/smartwalle/alipay/v3"先简单介绍下加密&#xff1a; 试想&#xff0c;当用户向支付宝付款时&#xff0c;若不进行任何加密&#xff0c;那么黑客就可以任…

机器学习——感知机模型

机器学习系列文章 入门必读:机器学习介绍 文章目录 机器学习系列文章前言1. 感知机1.1 感知机定义1.2 感知机学习策略2. 代码实现2.1 构建数据2.2 编写函数2.3 迭代3. 总结前言 大家好,大家好✨,这里是bio🦖。这次为大家带来的是感知机模型。下面跟我一起来了解感知机模…

uniapp:小程序数字键盘功能样式实现

代码如下&#xff1a; <template><view><view><view class"money-input"><view class"input-container" click"toggleBox"><view class"input-wrapper"><view class"input-iconone"…

交流负载箱的特点和优势有哪些?

交流负载箱广泛应用于电力系统、新能源、轨道交通、航空航天等领域。它具有以下特点和优势&#xff1a; 1. 灵活性高&#xff1a;交流负载箱可以根据实际需求&#xff0c;调整输出电流、电压、功率等参数&#xff0c;以满足不同场景下的测试需求。同时&#xff0c;它还可以实现…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《含海上风电制氢的综合能源系统分布鲁棒低碳优化运行》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

一文读懂私网解析 PrivateZone

越来越多的企业认同&#xff0c;多云和混合云是实现数字化变革的必由之路。Cisco 发布的《2022 Global Hybrid Cloud Trends Report》显示&#xff0c; 82% 的受访者使用混合多云架构来支撑其应用程序。混合云架构下&#xff0c;如何灵活、可靠且低成本地满足各种场景 DNS 的解…

CVE-2024-25600 WordPress Bricks Builder RCE-漏洞分析研究

本次代码审计项目为PHP语言&#xff0c;我将继续以漏洞挖掘者的视角来分析漏洞的产生&#xff0c;调用与利用..... 前方高能&#xff0c;小伙伴们要真正仔细看咯..... 漏洞简介 CVE-2024-25600 是一个严重的&#xff08;CVSS 评分 9.8&#xff09;远程代码执行 (RCE) 漏洞&am…

linux网络通信(TCP)

TCP通信 1.socket----->第一个socket 失败-1&#xff0c;错误码 参数类型很多&#xff0c;man查看 2.connect 由于s_addr需要一个32位的数&#xff0c;使用下面函数将点分十进制字符串ip地址以网络字节序转换成32字节数值 同理端口号也有一个转换函数 我们的端口号位两个字…

大屏适配pad包括大屏上的弹框

1.效果 横屏 2.竖屏效果 代码部分 <template><div class"tz_drive_wrapper" id"contain"><div class"tz_drive_header"><page-header></page-header><div class"tz_drive-time">通州区住房…

Android Studio Iguana | 2023.2.1版本

Android Gradle 插件和 Android Studio 兼容性 Android Studio 构建系统基于 Gradle&#xff0c;并且 Android Gradle 插件 (AGP) 添加了一些特定于构建 Android 应用程序的功能。下表列出了每个版本的 Android Studio 所需的 AGP 版本。 如果特定版本的 Android Studio 不支持…