FreeSWITCH

news2024/11/16 1:46:45

1概述

FreeSWITCH https://signalwire.com/freeswitch是一个开源的电话交换平台。官方给它的定义是–世界上第一个跨平台的、伸缩性极好的、免费的、多协议的电话软交换平台。由这个定义我们可以得出以下几点:

  • FreeSWITCH是跨平台的。它能原生地运行于Windows、MaxOSX、Linux、BSD 及Solaris等诸多32/64位平台(甚至,也有人成功地将它应用于Linksys NLS2平台及Raspberry Pi 上)。

  • FreeSWITCH具有很强的可伸缩性。FreeSWITCH从一个简单的软电话客户端到运营商用级的软交换设备几乎无所不能。

  • FreeSWITCH是免费的。它采用MPL1.1协议授权,意味着任何人都可以免费使用并获取源代码,任何人都可以修改、发布甚至出售自己的应用。

  • FreeSWITCH 支持 SIP、H323、Skype、Google Talk 等多种通信协议,并能很容易地与各种开源的 PBX系统(如 sipXecs、Call Weaver、Bayonne、YATE及 Asterisk 等通信,它也可以与商用的交换系统(如华为、中兴的交换机或思科、Avaya的交换机等)互通。
    在这里插入图片描述

  • FreeSWITCH可以用作一个简单的交换引擎、一个PBX、一个媒体网关或媒体支持IVR的服务器,或在运营商的IMS网络中扭当CSCF或ApplicationServer

  • FreeSWITCH遵循相关RFC并支持很多高级的SIP特性,如Presence、BLF、SLA以及TCP、TLS和SRTP等。它也可以用作一个SBC进行透明的SIP代理(proxy)以支持其他媒体,如T.38等。

  • FreeSWITCH 支持宽带及窄带语音编码,电话会议桥可同时支持8、12、16、24、32及48kHz的语音。

  • 从技术上讲,FreeSWITCH是一个B2BUA9,它作为一个背靠背的用户代理用来帮助通信的双方进行实时的语音视频通信。

在这里插入图片描述

1.1模块说明

  1. mod_abstraction:用于创建新的API命令,可以基于原有API创建别名或快捷方式 。
  2. mod_avmd:高级语音邮件检测,是mod_vmd的高级版 。
  3. mod_commands:提供大部分系统的命令API 。
  4. mod_conference:支持多人语音和视频会议 。
  5. mod_directory:允许用户通过姓名进行呼叫 。
  6. mod_distributor:帮助将呼叫分发到不同的网关 。
  7. mod_dptools:提供大部分系统的App 。
  8. mod_easyroute:根据号码进行路由,适用于大规模DID 。
  9. mod_enum:通过ENUM查询找到用户的SIP地址,并提供enum Dialplan 。
  10. mod_esf:提供通过Multicast方法进行组拨的功能 。
  11. mod_esl:实现两个FreeSWITCH间的ESL对接 。
  12. mod_expr:提供表达式计算 。
  13. mod_fifo:先进先出队列,适用于呼叫中心排队 。
  14. mod_lcr:最省钱的路由模块,根据数据库配置的路由信息和费率找到最省钱的路由 。
  15. mod_limit:用于系统资源限制 。
  16. mod_memcache:与Memcache交互,类似于远程的Memcache数据库 。
  17. mod_mongo:与MongoDB交互,类似于mod_memcache 。
  18. mod_sms:处理文本消息,如收发SIP MESSAGE消息等 。
  19. mod_xml_curl:从远程HTTP服务器获取XML配置 。
  20. mod_xml_ldap:从远程LDAP服务器获取XML配置 。

此外,还有一些模块提供自动语音识别及语音合成的功能,例如:

  • mod_cepstral:使用Cepstral语音库支持TTS 。
  • mod_flite:使用Festival Lite库支持TTS,但只支持英文 。
  • mod_pocketsphinx:使用pocketsphinx库支持语音识别 。
  • mod_unimrcp:通过uniMRCP协议与其他ASR/TTS产品对接 。

这些模块共同构成了FreeSWITCH的核心功能,使其能够灵活地适应各种电话和通信需求。

在这里插入图片描述

1.2配置文件

FreeSWITCH的配置文件主要位于conf/目录下,由一系列XML格式的配置文件组成。以下是一些重要的配置文件及其说明:

  1. freeswitch.xml:作为最顶层的配置文件,它通过include语句引入其他XML文件,组合成一个大的XML配置文件。
  2. vars.xml:包含一些常用的全局变量,这些变量可以在配置文件中通过$${var}来使用。
  3. dialplan/default.xml:这是默认的拨号计划,用于定义呼叫路由和处理规则。
  4. directory/default/*.xml:包含SIP用户的配置信息,通常每个用户都有自己的XML配置文件。
  5. sip_profiles/internal.xmlsip_profiles/external.xml:分别用于配置内部和外部的SIP用户代理(UA),监听不同的端口,用于不同网络环境的SIP通信。
  6. autoload_configs/modules.conf.xml:决定FreeSWITCH启动时自动加载哪些模块,而autoload_configs/目录下的其他*.xml文件通常用于模块的配置。
  7. ivr_menus目录:存放一些默认的IVR菜单示例。
  8. mrcp_profiles目录:包含与第三方语音合成和语音识别系统对接的相关配置。

在进行配置时,可以通过执行reloadxml命令或使用快捷键F6来使新的配置生效。此外,还可以通过API命令如global_getvar来获取全局变量的值。

这些配置文件共同工作,使FreeSWITCH能够适应各种电话和通信需求。如果需要对FreeSWITCH进行特定的配置,如添加SIP网关、配置呼入呼出规则等,可以在相应的配置文件中进行设置,并使用上述方法使配置生效。

freeswitch的配置文件非常重要,几乎所有的功能都离不开配置文件

默认安装路径为:C:\Program Files\FreeSWITCH
配置文件路径:C:\Program Files\FreeSWITCH\conf

conf/目录和文件 说明
——vars.xml 基本的配置
——autoload_configs/ 目录,存放各个模块的配置文件
——modules.conf.xml 配置FreeSWITCH启动时装载的模块
——*.xml 基本上每个模块都有相应的一个配置文件
——dialplan/ 拨号计划
——default.xml 用于内部用户路由的拨号计划配置
——public.xml 外部来话路由的拨号计划配置
——directory/ 用户目录
——default/ 默认的用户目录配置
——*.xml SIP用户,每个用户都有一个配置文件
——sip_profiles/ SIP配置文件
——internal.xml 一般SIP profile,或称作一个SIP-UA,监听在本地IP及端口
——external.xml 另一个SIP-UA,用作外部连接
——freeswitch.xml freeswitch.xml 引入各个配置文件,整合

1.3运行

1.3.1Linux

FreeSWITCH的启动方式通常有以下几种:

  1. 默认启动

    • 在安装FreeSWITCH后,通常可以通过系统的服务管理工具来启动。例如,在基于Systemd的系统上,可以使用以下命令:
      sudo systemctl start freeswitch
      
  2. 手动启动

    • 可以直接通过命令行手动启动FreeSWITCH。首先,需要定位到FreeSWITCH的安装目录,然后执行可执行文件:
      ./bin/freeswitch
      
  3. 后台启动

    • 有时候可能需要让FreeSWITCH在后台运行,可以通过添加-b参数来实现:
      ./bin/freeswitch -b
      
  4. 调试模式启动

    • 如果需要在开发或调试过程中启动FreeSWITCH,可以使用-nc参数来关闭控制台日志,以便在控制台中直接与FreeSWITCH交互:
      ./bin/freeswitch -nc
      
  5. 配置文件指定

    • 如果需要使用特定的配置文件启动FreeSWITCH,可以使用-c参数指定配置文件的路径:
      ./bin/freeswitch -c /path/to/custom.conf
      
  6. 日志级别设置

    • 可以通过-v参数后跟日志级别来设置FreeSWITCH的日志详细程度,例如:
      ./bin/freeswitch -v 3
      
  7. 使用脚本来启动

    • 在某些情况下,FreeSWITCH的安装可能包含一个启动脚本,该脚本可能位于/usr/local/bin/或其他自定义的可执行路径下,可以通过以下命令启动:
      sudo freeswitch start
      
  8. 使用环境变量

    • 在某些操作系统上,可以通过设置环境变量来指定FreeSWITCH的运行方式,例如,使用FREESWITCH_ARGS来添加启动参数。

确保在启动FreeSWITCH之前,你已经根据需要配置好了所有必要的设置,并且检查了系统防火墙和网络设置,以避免任何潜在的连接问题。如果FreeSWITCH是作为服务安装的,通常还会有相应的命令来停止、重启或查看服务状态。

1.3.2Windows

在Windows环境下启动FreeSWITCH通常有以下几个步骤:

  1. 下载安装包:首先需要从FreeSWITCH的官方网站下载适用于Windows的安装包,选择适合自己系统的版本(32位或64位)。

  2. 安装FreeSWITCH:下载完成后,运行安装程序,按照提示完成安装。默认情况下,FreeSWITCH会安装在C:\Program Files\FreeSWITCH路径下。

  3. 配置文件修改:安装完成后,可能需要修改配置文件,例如vars.xml中的密码和本地IP地址设置,以确保FreeSWITCH可以正确运行。

  4. 启动FreeSWITCH:可以通过双击桌面上的快捷方式或通过命令行启动FreeSWITCH。在命令行中,可以使用以下命令来启动FreeSWITCH:

    cd C:\Program Files\FreeSWITCH
    FreeSwitchConsole -nonat
    

    其中-nonat参数用于关闭自动NAT检测,适用于内网环境。

  5. 使用控制台:启动后,可以使用FreeSWITCH的控制台fs_cli来管理FreeSWITCH。控制台客户端fs_cli允许用户输入命令来控制或查询FreeSWITCH的状态。

  6. 注册SIP客户端:安装并启动FreeSWITCH后,可以使用SIP客户端软件(如MicroSIP)注册到FreeSWITCH,并进行呼叫测试。

  7. 服务化运行:在Windows上,还可以将FreeSWITCH注册为Windows服务,以实现开机自启动和后台运行的功能。

请注意,以上步骤可能会根据FreeSWITCH的具体版本和Windows系统环境有所不同。如果需要更详细的安装和配置指导,可以参考FreeSWITCH的官方文档或社区提供的教程。

1.3.3常用命令

一般来说,FreeSWITCH不需要任何命令行参数就可以启动,但在某些情况下,你需要以一些特殊的参数启动。使用freeswitch-h或freeswitch-help或freeswitch --help会显示以下信息:

#freeswitch -help

也可以采用fs_cli连接FreeSWITCH服务。

1.4API与APP

在FreeSWITCH中,API(应用程序接口)和APP(应用程序)是两个不同的概念,但它们共同协作以实现呼叫处理和通信任务。下面是对这两个概念的基本理解:

1.4.1API(Application Programming Interface)

  • 定义:API是一组预定义的函数、协议和工具,用于构建软件应用。在FreeSWITCH中,API允许开发者通过编程方式与FreeSWITCH服务器交互,执行各种操作,如发起呼叫、挂断、转接等。
  • 用途:API使得开发者可以远程控制FreeSWITCH的行为,实现复杂的呼叫流程和业务逻辑。
  • 类型:FreeSWITCH提供了多种API接口,包括但不限于CLI(命令行界面)、ESL(Event Socket Library,一种轻量级的协议,用于在FreeSWITCH和外部应用程序之间传输事件和命令)、HTTP API等。
  • 实现方式:API可以通过各种编程语言实现,如Python、PHP、Java等,只要能够发送请求到FreeSWITCH服务器并解析响应。

1.4.2APP(Application)

  • 定义:在FreeSWITCH的上下文中,APP指的是内建于FreeSWITCH的模块或应用程序,它们实现了特定的呼叫处理逻辑或功能。例如,answer APP在呼叫进入时自动应答呼叫,playback APP用于播放音频等。
  • 用途:APP用于执行具体的任务,如录音、播放、转接、会议等,它们是FreeSWITCH处理呼叫的基本单元。
  • 自定义:除了内建的APP,开发者也可以根据需要编写自定义APP来实现特定的业务逻辑。
  • 执行:APP通常通过拨号计划(Dialplan)中的指令或API调用来执行。例如,在Dialplan中使用app::answer来自动应答来电。

1.4.3理解它们的关系

  • 协作:API和APP在FreeSWITCH中共同工作。API允许外部系统或开发者控制FreeSWITCH的行为,而APP是FreeSWITCH内部执行具体任务的模块。
  • 控制与执行:API更多关注于控制层面,即告诉FreeSWITCH要做什么;APP则关注于执行层面,即实际执行API所触发的任务。
  • 灵活性:通过API,开发者可以灵活地控制FreeSWITCH的行为,而APP提供了执行这些控制的手段。

理解这两个概念有助于更好地使用FreeSWITCH构建通信应用程序,无论是通过编程接口实现高级的呼叫控制,还是通过内建或自定义的应用程序模块来处理具体的呼叫任务。

1.5目录结构

FreeSWITCH是一个开源的软PBX和会议软件,其目录结构设计得相对模块化,以便于开发者和系统管理员理解和使用。以下是FreeSWITCH的典型目录结构,以及每个目录的基本功能:

freeswitch/
├── bin/            # 包含可执行文件和脚本
│   ├── console       # FreeSWITCH命令行界面(fs_cli)的启动脚本
│   ├── freeswitch    # FreeSWITCH主服务启动脚本
│   └── ...           # 其他脚本和工具
├── conf/           # 配置文件目录
│   ├── autoload_configs/  # 用于存放自动加载的配置文件
│   ├── directory/    # 目录服务配置
│   ├── dialplan/     # 拨号计划配置文件
│   ├── ivr/          # IVR(Interactive Voice Response)配置
│   ├── sip_profiles/ # SIP配置文件
│   └── ...           # 其他配置文件
├── docs/           # 文档目录
│   ├── api/          # API文档
│   ├── html/         # HTML格式的文档
│   └── ...           # 其他文档
├── lib/            # 库文件目录
│   ├── mod/          # FreeSWITCH模块
│   └── ...           # 其他库文件
├── logs/           # 日志文件输出目录
│   ├── cdrb/         # CDR(呼叫详细记录)数据库日志
│   ├── diamond/     # 钻石路由日志
│   ├── switch.log    # 主日志文件
│   └── ...           # 其他日志文件
├──录  src/           # 源代码目录
│   ├── mod/          # 模块源代码
│   └── ...           # 其他源代码
├── sounds/         # 系统提示音目录
│   ├── en/           # 英文提示音
│   └── ...           # 其他语言提示音
├── scripts/        # 脚本目录
│   ├── autoprovision/ # 自动配置脚本
│   ├── cli/          # 命令行界面脚本
│   └── ...           # 其他脚本
└── sql/            # SQL脚本目录
    ├── cdrb/         # CDR数据库脚本
    └── ...           # 其他SQL脚本

请注意,这个目录结构可能会根据FreeSWITCH的不同版本和安装方式有所不同。此外,用户在安装和配置FreeSWITCH时可能会根据自己的需求添加或修改目录。

系统管理员和开发者通常会频繁与bin/conf/logs/scripts/等目录交互,因为这些目录包含了启动脚本、配置文件、日志记录和辅助脚本等重要组件。而src/目录则包含了FreeSWITCH的源代码,对于希望对FreeSWITCH进行修改或贡献代码的开发者来说非常重要。

1.6Linux(Ubuntu/Centos7)安装FreeSWITCH

Centos7部署FreeSWITCH参考文档https://github.com/lyjlyx/study-note/blob/7a5f942a10d19764315ad05af358af98f62549ca/FreeSwitch%E5%AD%A6%E4%B9%A0/Freeswitch%E5%AE%89%E8%A3%85%2B%E6%93%8D%E4%BD%9C%E9%97%AE%E9%A2%98%E6%B1%87%E6%80%BB.md?plain=1#L52

1.6.1更新软件包列表

首先,打开终端,以管理员权限运行以下命令来更新软件包列表:

sudo apt update
sudo apt upgrade 
********************************************************************************************************************************
sudo yum update

1.6.2安装依赖包

FreeSWITCH的编译安装需要一系列依赖包。运行以下命令来安装这些依赖包:

sudo apt install -y build-essential autoconf automake libtool wget python3-dev libjpeg-dev libncurses5-dev libsqlite3-dev libssl-dev libcurl4-openssl-dev libpcre3-dev libspeex-dev libspeexdsp-dev libldns-dev libedit-dev libopus-dev liblua5.3-dev libsndfile1-dev libedit-dev yasm libtiff-dev libavformat-dev libswscale-dev libavresample-dev libpq-dev libreadline-dev lua5.2 lua5.2-doc liblua5.2-dev libspandsp-dev
********************************************************************************************************************************
yum install -y git alsa-lib-devel autoconf automake bison broadvoice-devel bzip2 curl-devel libdb4-devel e2fsprogs-devel erlang flite-devel g722_1-devel gcc-c++ gdbm-devel gnutls-devel ilbc2-devel ldns-devel libcodec2-devel libcurl-devel libedit-devel libidn-devel libjpeg-devel libmemcached-devel libogg-devel libsilk-devel libsndfile-devel libtheora-devel libtiff-devel libtool libuuid-devel libvorbis-devel libxml2-devel lua-devel lzo-devel mongo-c-driver-devel ncurses-devel net-snmp-devel openssl-devel opus-devel pcre-devel perl perl-ExtUtils-Embed pkgconfig portaudio-devel postgresql-devel python-devel python-devel soundtouch-devel speex-devel sqlite-devel unbound-devel unixODBC-devel wget which yasm zlib-devel libshout-devel libmpg123-devel lame-devel libatomic

以下所有安装都在/usr/local/src目录下执行

  • 安装cmake

    wget https://cmake.org/files/v3.17/cmake-3.17.2.tar.gz
    tar vzxf cmake-3.17.2.tar.gz
    cd cmake-3.17.2
    ./configure
    make -dj
    make install
    ************************************************************************************************************
    wget https://cmake.org/files/v3.7/cmake-3.7.2.tar.gz
    tar -zxvf cmake-3.7.2.tar.gz
    cd cmake-3.7.2
    ./bootstrap --prefix=/usr/local
    make
    make install
    /usr/local/bin/cmake --version
    
  • 安装libuuid(手机热点)

    wget --no-check-certificate https://jaist.dl.sourceforge.net/project/libuuid/libuuid-1.0.3.tar.gz
    tar -zxvf libuuid-1.0.3.tar.gz
    cd libuuid-1.0.3
    ./configure 
    make 
    make install # 重新执行libks的 cmake . #### 问题解决。然后执行libks

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

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

相关文章

智启万象 | Web 开发智能升级、简单易用

AI 的融入使 Web 的功能更加强大 同时也更加简单易用 一起回顾 2024 Google 开发者大会 了解 Web 开发 UI 功能和 OS 集成的最新创新 以及如何通过这些创新来打造卓越的应用体验 Web 不断的革新与发展,不仅为全球数十亿用户提供了丰富多样的在线体验,也为…

HCIP | 重发布实验

要求: 1.如图搭建网络拓扑,所有路由器各自创建一个环回接口,合理规划IP地址 2.R1-R2-R3-R4-R6之间使用OSPF协议,R4-R5-R6之间使用RIP协议 3.R1环回重发布方式引入OSPF网络 4.R4/R6上进行双点双向重发布 5.分析网络中出现路由…

人工智能在肿瘤亚型分类领域的研究进展|顶刊速递·24-08-13

小罗碎碎念 文献日推主题:人工智能在肿瘤亚型分类领域的研究进展 昨天晚上在研究鼻咽癌的病理学诊断指南,看到了下面这段话的时候,我问了自己一个问题——通过AI识别出肿瘤亚型的根本目的是什么?可以衔接哪些具体的下游任务&#…

「栈」实现LIFO栈(先进后出栈|堆栈|stack)的功能 / 手撕数据结构(C++)

概述 栈,是一种基本的数据结构,也是一种数据适配器。它在底层上以链表方法或动态数组方法实现。 队列的显著特点是他的添加元素与删除元素操作:先加入的元素总是被先弹出。 一个队列应该应该是这样的: --------------STACK----…

UE网络同步(一) —— 一个项目入门UE网络同步之概念解释

最近在学习UE网络同步,发现了一个非常好的教程,并且附带了项目文件,这里从这个小项目入手,理解UE的网络同步 教程链接:https://www.youtube.com/watch?vJOJP0CvpB8w 项目链接:https://github.com/awforsyt…

单片机内存映射

在一些桌面程序中,整个内存映射是通过虚拟内存来进行管理的,使用一种称为内存管理单元(MMU)的硬件结构来将程序的内存映射到物理RAM。在对于 RAM 紧缺的嵌入式系统中,是缺少 MMU 内存管理单元的。 因此在一些嵌入式系统中,比如常用…

Python 设计模式之适配者模式

文章目录 从电源适配器谈起实现适配器模式的两种方式object adapterclass adapter 从电源适配器谈起 适配者模式属于结构型设计模式,它的目的是使不兼容的两个对象能够相互工作。 常见的生活例子:去欧美国家旅游时,由于插口和电压不一样&am…

2024年【四川省安全员B证】新版试题及四川省安全员B证模拟考试

题库来源:安全生产模拟考试一点通公众号小程序 四川省安全员B证新版试题是安全生产模拟考试一点通总题库中生成的一套四川省安全员B证模拟考试,安全生产模拟考试一点通上四川省安全员B证作业手机同步练习。2024年【四川省安全员B证】新版试题及四川省安…

苍穹外卖项目DAY01

苍穹外卖项目Day01 1、软件开发整体介绍 1.1、软件开发流程 1.2、角色分工 项目经理:对整个项目负责,任务分配、把控进度产品经理:进行需求调研,输出需求调研文档、产品原型等UI设计师:根据产品原型输出界面效果图架…

第130天:内网安全-横向移动PTH哈希PTT 票据PTK密匙Kerberos密码喷射

环境搭建 这里这个环境继续上一篇文章搭建的环境 案例一:域横向移动-PTH-Mimikatz&NTLM 什么是pth? PTH Pass The Hash ,通过密码散列值 ( 通常是 NTLM Hash) 来进行攻击。在域环境中,用户登录计算机时使用的域账号&…

Linux_Shell判断循环,函数实例,状态码-07

一:分支语句 结束语句等于开始语句得单词反着写 1.1 if语句 if 表达式 then逻辑处理 elif 表达式 then逻辑处理 else逻辑处理 fi 1.1.1 单支语句 1.1.2 双分支语句 1.1.3 多分支语句 1.2 case条件结构语句 1.2.1 case语法结构 case 表达式 in 值) ;; esac 1.2…

Redis14-缓存同步

目录 缓存同步策略 安装Canal 监听Canal 缓存同步策略 缓存数据同步的常见方式有三种: 1.设置有效期:给缓存设置有效期,到期后自动删除,再次查询时更新 优势:简单、方便缺点:时效性差,缓存…

【CPP】CPP的STL(前篇)

目录 12 STL(前篇)12.1 什么是STL12.2 string类12.2.1 什么是string12.2.2 string类的构造函数12.2.3 string类的析构函数12.2.4 string类的[]重载12.2.5 string类的迭代器的简单了解12.2.6 auto关键字12.2.7 范围for12.2.8 反向迭代器 -- reverse12.2.9 const迭代器12.2.10 CP…

superset定制化配置修改总结

1.需要想用iframe引入dashboard时, URL 参数可用于修改仪表板的呈现方式,standalone0 属性枚举描述standalone0仪表盘正常显示1顶部导航已隐藏2顶部导航 标题被隐藏3顶部导航 标题 顶级标签被隐藏show_filters0渲染没有过滤栏的仪表板1(默…

深度学习 —— 个人学习笔记16(目标检测和边界框、目标检测数据集)

声明 本文章为个人学习使用,版面观感若有不适请谅解,文中知识仅代表个人观点,若出现错误,欢迎各位批评指正。 三十二、目标检测和边界框 import torch import matplotlib.pyplot as plt from matplotlib_inline import backend_…

Python爬虫开发:BeautifulSoup、Scrapy入门

在现代网络开发中,网络爬虫是一个非常重要的工具。它可以自动化地从网页中提取数据,并且可以用于各种用途,如数据收集、信息聚合和内容监控等。在Python中,有多个库可以用于爬虫开发,其中BeautifulSoup和Scrapy是两个非…

CVE-2024-38077:Windows远程桌面授权服务的‘隐形杀手’——深度剖析与紧急防护策略

文章目录 CVE-2024-38077:Windows远程桌面授权服务的‘隐形杀手’——深度剖析与紧急防护策略1 漏洞描述2 漏洞影响2.1 处置优先级:高2.2 影响版本 3 漏洞检测3.1 漏洞检测工具3.2 漏洞检测工具使用介绍3.2.1 漏洞检测工具当前支持三种方式检测3.2.2 漏洞…

常见的三个事务问题(脏读/幻读/不可重复读)

常见的三个事务问题(脏读/幻读/不可重复读) 脏读 脏读(Dirty Read)是指在一个事务中,读取了另一个未提交事务的数据。 具体来说,脏读的过程如下: 1. 事务A开始,对某一行数据进行…

C++学习笔记之数组

C学习笔记之数组 https://www.runoob.com/cplusplus/cpp-arrays.html C当中,数组是用于存储固定大小的相同类型元素的顺序集合 数组是整体作为一个变量,其中又包含多个单独变量,作为其元素,如数组变量a,其包含a[0]~a[…

html+css+js网页制作 淘宝首页1个页面带js

htmlcssjs网页制作 淘宝首页1个页面带js 网页作品代码简单,可使用任意HTML编辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 1&…