首页 > 其他分享 >压力测试(caliper具体步骤+示例)

压力测试(caliper具体步骤+示例)

时间:2024-08-01 19:27:13浏览次数:15  
标签:示例 -- caliper 192.168 Caliper 具体步骤 测试 docker

Caliper压力测试(具体步骤+示例)

一、Caliper压力测试指南

1. 环境要求

(1)配置基本环境

  • 部署Caliper的计算机需要有外网权限;

    在这里插入图片描述
    在这里插入图片描述

    解决方法:

    #通常情况下,DNS 服务器由你的网络配置提供。你可以查看当前的 DNS 设置:
    
    cat /etc/resolv.conf
    
    oot@thy-virtual-machine:/home/thy/fisco# cat /etc/resolv.conf
    # This is /run/systemd/resolve/stub-resolv.conf managed by man:systemd-resolved(8).
    # Do not edit.
    #
    # This file might be symlinked as /etc/resolv.conf. If you're looking at
    # /etc/resolv.conf and seeing this text, you have followed the symlink.
    #
    # This is a dynamic resolv.conf file for connecting local clients to the
    # internal DNS stub resolver of systemd-resolved. This file lists all
    # configured search domains.
    #
    # Run "resolvectl status" to see details about the uplink DNS servers
    # currently in use.
    #
    # Third party programs should typically not access this file directly, but only
    # through the symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a
    # different way, replace this symlink by a static file or a different symlink.
    #
    # See man:systemd-resolved.service(8) for details about the supported modes of
    # operation for /etc/resolv.conf.
    
    nameserver 127.0.0.53
    options edns0 trust-ad
    search .
    
    #确保 nameserver 条目指向正确的 DNS 服务器。如果看起来不正确或有问题,可以尝试手动修改为已知可靠的 DNS 服务器,如 Google 的公共 DNS:
    
    echo "nameserver 8.8.8.8" > /etc/resolv.conf 或者
    vim /etc/resolv.conf
    
    # This is /run/systemd/resolve/stub-resolv.conf managed by man:systemd-resolved(8).
    # Do not edit.
    #
    # This file might be symlinked as /etc/resolv.conf. If you're looking at
    # /etc/resolv.conf and seeing this text, you have followed the symlink.
    #
    # This is a dynamic resolv.conf file for connecting local clients to the
    # internal DNS stub resolver of systemd-resolved. This file lists all
    # configured search domains.
    #
    # Run "resolvectl status" to see details about the uplink DNS servers
    # currently in use.
    #
    # Third party programs should typically not access this file directly, but only
    # through the symlink at /etc/resolv.conf. To manage man:resolv.conf(5) in a
    # different way, replace this symlink by a static file or a different symlink.
    #
    # See man:systemd-resolved.service(8) for details about the supported modes of
    # operation for /etc/resolv.conf.
    
    nameserver 8.8.8.8  ####修改为8.8.8.8
    options edns0 trust-ad
    search localdomain
    ~                                                                                                                                   
    ~                                                                                                                                   
    ~                     
    
    #如果你对配置进行了更改,可能需要重新启动 systemd-resolved 服务使其加载新的配置:
    
    sudo systemctl restart systemd-resolved
    
    
  • 操作系统版本需要满足以下要求:Ubuntu >= 16.04、CentOS >= 7或MacOS >= 10.14;

  • 部署Caliper的计算机需要安装有以下软件:python 2.7、make、g++、gcc及git。

2. NodeJS

  • 版本要求:

    NodeJS 8 (LTS), 9, 或 10 (LTS),Caliper尚未在更高的NodeJS版本中进行过验证。

  • 安装指南:

    建议使用nvm(Node Version Manager)安装,nvm的安装方式如下:

# 安装nvm
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash

# 若出现因网络问题导致长时间下载失败,可尝试以下命令
curl -o- https://gitee.com/mirrors/nvm/raw/v0.33.2/install.sh | bash

# 加载nvm配置
source ~/.$(basename $SHELL)rc
# 安装Node.js 8
nvm install 8
# 使用Node.js 8
nvm use 8

查看可用版本:

nvm ls-remote

安装具体版本

nvm install 8.17.0

验证安装:

在这里插入图片描述

3.部署Docker

# 更新包索引
sudo apt-get update
# 安装基础依赖库
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
# 添加Docker官方GPG key
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
# 添加docker仓库
sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
# 更新包索引
sudo apt-get update
# 安装Docker
sudo apt-get install docker-ce docker-ce-cli containerd.io

在这里插入图片描述

加入Docker用户组

sudo groupadd docker
sudo usermod -aG docker $USER

4. 安装Docker Compose

sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

5.Caliper部署

  1. 建立一个工作目录
mkdir benchmarks && cd benchmarks
  1. 对NPM项目进行初始化
npm init
  1. 安装caliper-cli
npm install --only=prod @hyperledger/[email protected]

由于Caliper所有依赖项的安装较为耗时,因此使用--only=prod选项用于指定NPM只安装Caliper的核心组件,而不安装其他的依赖项(如各个区块链平台针对Caliper的适配器)。在部署完成后,可以通过caliper-cli显式绑定需要测试的区块链平台及相应的适配器。

  1. 验证caliper-cli安装成功
npx caliper --version

若安装成功,则会打印相应的版本信息,如:

user@ubuntu:~/benchmarks$ npx caliper --version
v0.2.0

由于Caliper采用了轻量级的部署方式,因此需要显式的绑定步骤指定要测试的平台及适配器版本,caliper-cli会自动进行相应依赖项的安装。使用npx caliper bind命令进行绑定,命令所需的各项参数可以通过如下命令查看:

user@ubuntu:~/benchmarks$ npx caliper bind --help
Usage:
  caliper bind --caliper-bind-sut fabric --caliper-bind-sdk 1.4.1 --caliper-bind-cwd ./ --caliper-bind-args="-g"

Options:
  --help               Show help  [boolean]
  -v, --version        Show version number  [boolean]
  --caliper-bind-sut   The name of the platform to bind to  [string]
  --caliper-bind-sdk   Version of the platform SDK to bind to  [string]
  --caliper-bind-cwd   The working directory for performing the SDK install  [string]
  --caliper-bind-args  Additional arguments to pass to "npm install". Use the "=" notation when setting this parameter  [string]

其中,

–caliper-bind-sut :用于指定需要测试的区块链平台,即受测系统(System under Test); –caliper-bind-sdk:用于指定适配器版本; –caliper-bind-cwd:用于绑定caliper-cli的工作目录,caliper-cli在加载配置文件等场合时均是使用相对于工作目录的相对路径; caliper-bind-args:用于指定caliper-cli在安装依赖项时传递给npm的参数,如用于全局安装的-g

对于FISCO BCOS,可以采用如下方式进行绑定:

npx caliper bind --caliper-bind-sut fisco-bcos --caliper-bind-sdk latest

6.快速体验FISCO BCOS基准测试

为方便测试人员快速上手,FISCO BCOS已经为Caliper提供了一组预定义的测试样例,测试对象涵盖HelloWorld合约、Solidity版转账合约及预编译版转账合约。同时在测试样例中,Caliper测试脚本会使用docker在本地自动部署及运行4个互连的节点组成的链,因此测试人员无需手工搭链及编写测试用例便可直接运行这些测试样例。

在工作目录下下载预定义测试用例

git clone https://github.com/vita-dounai/caliper-benchmarks.git

注意 若出现网络问题导致的长时间拉取代码失败,则尝试以下方式:

# 拉取gitee代码
git clone https://gitee.com/mirrors_hyperledger/caliper-benchmarks.git

caliper benchmark run所需的各项参数可以通过如下命令查看:

user@ubuntu:~/benchmarks$ npx caliper benchmark run --help
caliper benchmark run --caliper-workspace ~/myCaliperProject --caliper-benchconfig my-app-test-config.yaml --caliper-networkconfig my-sut-config.yaml

Options:
  --help                   Show help  [boolean]
  -v, --version            Show version number  [boolean]
  --caliper-benchconfig    Path to the benchmark workload file that describes the test client(s), test rounds and monitor.  [string]
  --caliper-networkconfig  Path to the blockchain configuration file that contains information required to interact with the SUT  [string]
  --caliper-workspace      Workspace directory that contains all configuration information  [string]

–caliper-workspace:用于指定caliper-cli的工作目录,如果没有绑定工作目录,可以通过该选项动态指定工作目录; –caliper-benchconfig:用于指定测试配置文件,测试配置文件中包含测试的具体参数,如交易的发送方式、发送速率控制器类型、性能监视器类型等; –caliper-networkconfig:用于指定网络配置文件,网络配置文件中会指定Caliper与受测系统的连接方式及要部署测试的合约等。

7.自定义测试用例

配置Docker Daemon及部署FISCO BCOS网络

如果只想基于已经搭建好的链进行测试,可以跳过本小节。

配置Docker Daemon

为方便Caliper统一管理节点容器及监控性能数据,在运行节点的服务器上首先需要开启Docker Daemon服务。

开始之前,先停止docker进程:

sudo service docker stop

创建/etc/docker/daemon.json文件(如果已经存在则修改),加入以下内容:

{
  "hosts" : ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]
}

“unix:///var/run/docker.sock”:UNIX套接字,本地客户端将通过这个来连接Docker Daemon; tcp://0.0.0.0:2375,TCP套接字,表示允许任何远程客户端通过2375端口连接Docker Daemon.

使用sudo systemctl edit docker新建或修改/etc/systemd/system/docker.service.d/override.conf,其内容如下:

##Add this to the file for the docker daemon to use different ExecStart parameters (more things can be added here)
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd

默认情况下使用systemd时,docker.service的设置为:ExecStart=/usr/bin/dockerd -H fd://,这将覆写daemon.json中的任何hosts。通过override.conf文件将ExecStart定义为:ExecStart=/usr/bin/dockerd,就能使daemon.json中设置的hosts生效。override.conf中的第一行ExecStart=必须要有,这一行将用于清除默认的ExecStart参数。

重新加载daemon并重启docker服务:

sudo systemctl daemon-reload
sudo systemctl restart docker.service

检查端口监听:

sudo netstat -anp | grep 2375

如果出现以下字样则表明配置成功:

tcp6       0      0 :::2375                 :::*                    LISTEN      79018/dockerd

此时能够在另一台机器上通过远程连接访问本机的Docker Daemon服务,例如:

# 假设开启Docker Daemon服务的机器IP地址为192.168.1.1
docker -H 192.168.1.1:2375 images
建链

使用开发部署工具 build_chain.sh脚本快速建链。本节以4个节点、全连接的形式搭链,但本节所述的测试方法能够推广任意数量节点及任意网络拓扑形式的链。

创建生成节点的配置文件(如一个名为ipconf的文件),文件内容如下:

192.168.1.1:1 agency1 1
192.168.1.2:1 agency1 1
192.168.1.3:1 agency1 1
192.168.1.4:1 agency1 1

生成链中节点的配置文件:

bash build_chain.sh -f ipconf -i -p 30914,20914,8914

将产生的节点配置文件夹分别拷贝至对应的服务器上:

scp -r 192.168.1.1/node0/ [email protected]:/data/test
scp -r 192.168.1.2/node0/ [email protected]:/data/test
scp -r 192.168.1.3/node0/ [email protected]:/data/test
scp -r 192.168.1.4/node0/ [email protected]:/data/test

在另外一台机器上部署Caliper,部署教程见第二节。

网络配置

新建一个名为4nodes1group的目录,本阶示例中的FISCO BCOS适配器的网络配置文件均会放置于此。新建一个名为fisco-bcos.json的配置文件,文件内容如下:

{
    "caliper": {
        "blockchain": "fisco-bcos",
        "command": {
            "start": "sh network/fisco-bcos/4nodes1group/start.sh",
            "end": "sh network/fisco-bcos/4nodes1group/end.sh"
        }
    },
    "fisco-bcos": {
        "config": {
            "privateKey": "bcec428d5205abe0f0cc8a734083908d9eb8563e31f943d760786edf42ad67dd",
            "account": "0x64fa644d2a694681bd6addd6c5e36cccd8dcdde3"
        },
        "network": {
            "nodes": [
                {
                    "ip": "192.168.1.1",
                    "rpcPort": "8914",
                    "channelPort": "20914"
                },
                {
                    "ip": "192.168.1.2",
                    "rpcPort": "8914",
                    "channelPort": "20914"
                },
                {
                    "ip": "192.168.1.3",
                    "rpcPort": "8914",
                    "channelPort": "20914"
                },
           ],
            "authentication": {
                "key": "packages/caliper-samples/network/fisco-bcos/4nodes1group/sdk/node.key",
                "cert": "packages/caliper-samples/network/fisco-bcos/4nodes1group/sdk/node.crt",
                "ca": "packages/caliper-samples/network/fisco-bcos/4nodes1group/sdk/ca.crt"
            },
            "groupID": 1,
            "timeout": 600000
        },
        "smartContracts": [
            {
                "id": "helloworld",
                "path": "src/contract/fisco-bcos/helloworld/HelloWorld.sol",
                "language": "solidity",
                "version": "v0"
            }
        ]
    },
    "info": {
        "Version": "2.0.0",
        "Size": "4 Nodes",
        "Distribution": "Remote Host"
    }
}

配置文件中每一项的具体含义如下:

  • caliper.command.start

启动Caliper时会首先执行start配置中指定的命令,主要用于初始化SUT。本文示例中使用Docker模式启动,启动Caliper时首先执行当前目录下的start.sh文件,其具体内容是:

docker -H 192.168.1.1:2375 run -d --rm --name node0 -v /data/test/node0/:/data -p 8914:8914 -p 20914:20914 -p 30914:30914 -w=/data fiscoorg/fiscobcos:latest -c config.ini 1> /dev/null
docker -H 192.168.1.2:2375 run -d --rm --name node1 -v /data/test/node0/:/data -p 8914:8914 -p 20914:20914 -p 30914:30914 -w=/data fiscoorg/fiscobcos:latest -c config.ini 1> /dev/null
docker -H 192.168.1.3:2375 run -d --rm --name node2 -v /data/test/node0/:/data -p 8914:8914 -p 20914:20914 -p 30914:30914 -w=/data fiscoorg/fiscobcos:latest -c config.ini 1> /dev/null
docker -H 192.168.1.4:2375 run -d --rm --name node3 -v /data/test/node0/:/data -p 8914:8914 -p 20914:20914 -p 30914:30914 -w=/data fiscoorg/fiscobcos:latest -c config.ini 1> /dev/null

即启动远程的Docker容器。如果不需要在Caliper启动时执行命令,需要将该配置项置空。

  • caliper.command.end

Caliper在退出流程的最后会执行end配置指定的命令,主要用于清理环境。本例中在测试结束时会执行当前目录下的end.sh文件,其具体内容是:

docker -H 192.168.1.1:2375 stop $(docker -H 192.168.1.1:2375 ps -a | grep node0 | cut -d " " -f 1) 1> /dev/null && echo -e "\033[32mremote container node0 stopped\033[0m"
docker -H 192.168.1.2:2375 stop $(docker -H 192.168.1.2:2375 ps -a | grep node1 | cut -d " " -f 1) 1> /dev/null && echo -e "\033[32mremote container node1 stopped\033[0m"
docker -H 192.168.1.3:2375 stop $(docker -H 192.168.1.3:2375 ps -a | grep node2 | cut -d " " -f 1) 1> /dev/null && echo -e "\033[32mremote container node2 stopped\033[0m"
docker -H 192.168.1.4:2375 stop $(docker -H 192.168.1.3:2375 ps -a | grep node3 | cut -d " " -f 1) 1> /dev/null && echo -e "\033[32mremote container node3 stopped\033[0m"

即停止并删除有所的远程容器。如果不需要在Caliper退出时执行命令,需要将该配置项置空。

  • network.nodes

一个包含了所有要连接节点的列表,列表中每一项需要指明被连接节点的IP地址、RPC端口及Channel端口号,所有端口号需要和节点的配置文件保持一致。

  • network.authentication

适配器向节点的Channel端口发起请求时需要使用CA根证书等文件,这些文件已在3.1.2节中调用build_chain.sh脚本时已经生成好,使用任一节点配置下的sdk文件夹中的相应文件即可,需要在该配置中写上所有文件的路径(使用相对路径时需要以caliper-cli工作目录为起始目录)。

  • network.smartContracts

指定要测试的合约,Caliper会在启动时想后端区块链系统部署合约。目前FISCO BCOS适配器支持通过language字段指定两种类型的合约——Solidity合约和预编译合约,当测试合约为Solidity合约时,language字段需要指定为solidity,当测试合约为预编译合约时,language字段需要指定为precompiled。当测试合约为预编译合约时,需要在address字段中指定预编译合约的地址,否则需要在path字段中指定Solidity合约的路径。

测试配置

测试配置用于指定测试的具体运行方式。测试配置是一个YAML文件,HelloWorld合约的测试配置文件内容如下所示:

---
test:
  name: Hello World
  description: This is a helloworld benchmark of FISCO BCOS for caliper
  clients:
    type: local
    number: 1
  rounds:
  - label: get
    description: Test performance of getting name
    txNumber:
    - 10000
    rateControl:
    - type: fixed-rate
      opts:
        tps: 1000
    callback: benchmarks/samples/fisco-bcos/helloworld/get.js
  - label: set
    description: Test performance of setting name
    txNumber:
    - 10000
    rateControl:
    - type: fixed-rate
      opts:
        tps: 1000
    callback: benchmarks/samples/fisco-bcos/helloworld/set.js
monitor:
  type:
  - docker
  docker:
    name:
    - http://192.168.1.1:2375/node0
    - http://192.168.1.2:2375/node1
    - http://192.168.1.3:2375/node2
    - http://192.168.1.4:2375/node3
  interval: 0.1

测试文件中主要包括两部分:

  • 测试内容配置

test项负责对测试内容进行配置。配置主要集中在round字段中指定如何对区块链系统进行测试。每一个测试可以包含多轮,每一轮可以向区块链发起不同的测试请求。具体要HelloWorld合约测试,测试中包含两轮,分别对合约的get接口和set接口进行测试。在每一轮测试中,可以通过txNumbertxDuration字段指定测试的交易发送数量或执行时间,并通过rateControl字段指定交易发送时的速率控制器,在本节的示例中,使用了QPS为1000的匀速控制器,更多速率控制器的介绍可以参考官方文档

  • 性能监视器配置

monitor项负责对测试所使用的性能监视器的进行配置。每项配置项的解释如下:

  1. monitor.type,需要指定为docker,指对docker容器进行监控;
  2. monitor.docker.name,一个包含所有要监视的节点的docker容器名称列表,名字必须以http://开头,其后跟随”{节点的IP}:{节点docker daemon端口}/{docker容器的名称}”;
  3. monitor.interval,监视器的采样间隔,单位为秒。

如果是在本地搭好的链,则可以添加本地性能监视器,相应地监视器的配置更改如下:

monitor:
  type:
  - process
  process:
    - command: node0
      multiOutput: avg
    - command: node1
      multiOutput: avg
    - command: node2
      multiOutput: avg
    - command: node3
      multiOutput: avg
  interval: 0.1

其中每项配置项的解释如下:

  1. monitor.type,需要指定为process,只对进程进行监控;
  2. monitor.process,一个包含所有要监视的进称列表,其中每个进程的command属性为一个正则表达式,表示进程名称;每个进程还可以有一个arguments属性(未在上述示例中使用到),表示进程的参数。Caliper会先使用ps命令搜索commad + arguments,然后匹配以得到目标的进程的进程ID及系统资源的使用情况。每个进程的multiOutput属性用于指定结果的输出方式,目前支持平均值(avg)及总和(sum)两种方式;
  3. monitor.interval,监视器的采样间隔,单位为秒。

二、实战演练

1.搭建区块链网络

bash build_chain.sh -l 127.0.0.1:4 -p 30300,20200,8545 -e./fisco-bcos 

在这里插入图片描述

2.启动webase-front,部署合约

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

获得contractaddress和production的私钥和账户地址

3.修改配置和编写测试脚本

在这里插入图片描述

修改fisco-bcos,json中的contractaddress和production的私钥和账户地址并编写newfood.js测试脚本

'use strict';

module.exports.info = 'setting name';newFood
let bc, contx;
let txnPerBatch;
module.exports.init = function(blockchain, context, args){
txnPerBatch = 1; 10
bc = blockchain;
contx = context;
return Promise.resolve();
};

/**
*Generates simple workload
*@return {Object} array of json objects
*/

function generateWorkload(){
let workload =[];
for (let i=0;i < txnPerBatch; i++){
let w = {
'transaction_type': 'set(string)',newFood(string,uint256,string,uint8)
'name':'hello! - from'+ process.pid.toString()  'name':'name',
};                                              'traceNumber':100+i,
workload.push(w);                               'traceName':'traceName',
}                                                 'quality':1    
return workload;
}
module.exports.run =function(){
let args = generateWorkload();
return bc.invokeSmartContract(contx, 'helloworld', 'v0’, args, null);
};
module.exports.end = function(){
// Do nothing
return Promise.resolve();
};

4.进行测试

npx caliper benchmark run --caliper-worspace,--caliper-benchconfig ./config.yaml --caliper-networkconfig ./fisco-bcos.json 

在这里插入图片描述

在这里插入图片描述

标签:示例,--,caliper,192.168,Caliper,具体步骤,测试,docker
From: https://blog.csdn.net/2401_84837659/article/details/140855267

相关文章

  • 【算法】浅析线性规划算法【附完整示例】
    线性规划算法:优化资源配置,提升经济效益1.引言在现代社会,资源优化配置是提高经济效益的关键。线性规划算法作为一种优化工具,广泛应用于经济学、工程学、管理学等领域。本文将带你了解线性规划算法的原理、使用方法及其在实际应用中的意义,并通过代码示例和图示帮助大家更好......
  • 基于 STM32 的 NAS私有云盘搭建:集成LwIP 协议、HTTP/HTTPS、WEB前端技术栈(代码示例)
    项目概述在本项目中,我们将搭建一个基于STM32的NAS(网络附加存储)私盘,通过网络访问存储在外部SATA硬盘上的文件。该项目将使用STM32开发板、外接SATA硬盘、LwIP协议栈以及FATFS文件系统来实现文件的上传、下载和管理,用户可以通过简单的Web界面进行操作。系统设计......
  • hostapd 配置文件示例
    b模式:2.4G20MHz#接口和驱动程序设置interface=wlan0driver=nl80211ctrl_interface=/var/run/hostapd​#基本网络设置ssid=TestAPhw_mode=bchannel=11​#WPA身份验证设置wpa=2wpa_key_mgmt=WPA-PSKwpa_passphrase=12345678​#加密算法设置wpa_pairwise=CCMP......
  • SpringCloud示例项目,使用的SpringBoot3.3.2
    先启动nacos:https://www.cnblogs.com/xsj1989/p/18323636特别注意,SpringBoot、SpringCloud、Openfeign等依赖的版本必须相匹配,不然会报各种错。具体版本对应关系看官网。或者看:https://start.spring.io/actuator/info父pom<?xmlversion="1.0"encoding="UTF-8"?><projectxmln......
  • 搭建 STM32 网关服务器的全流程:集成嵌入式 C++、TCP/IP 通信、Flash 存储及 JWT 认证(
    引言随着物联网(IoT)技术的快速发展,基于STM32的服务器(类似网关)在数据采集、设备控制等方面的应用越来越广泛。本文将介绍搭建一个基于STM32的服务器所需的技术栈,以及详细的搭建步骤和代码示例。技术栈介绍在搭建基于STM32的服务器时,我们需要用到以下技术栈和组件:1.硬......
  • just-validate浏览器端验证框架示例
    地址:Just-validatepackage.json:{"name":"vanilla-template","version":"1.0.0","type":"module","scripts":{"dev":"farm","start":&qu......
  • PHP框架中用户认证和授权的实现方法与示例
    本文由ChatMoney团队出品在Web开发中,用户认证(Authentication)和授权(Authorization)是构建安全应用程序的核心组件。用户认证是验证用户身份的过程,确保用户是他们声称的那个人。而授权则是确定已认证用户是否有权访问特定资源或执行特定操作的过程。PHP框架通过提供内置机制或集......
  • vue模板中使用临时变量实例,for 循环中使用临时变量继承函数运行结果示例,函数运行结果
    示例代码<!--vue模板中使用临时变量测试示例--><template><divclass="component-name"><!--vue模板中循环定义临时变量实现--><divv-for="iteminitems":key="item.id":data-item="(itemTemp=formatter......
  • 理解 C# 中的索引器(Indexer)详解与示例
    文章目录1.索引器的基本概念2.索引器的语法3、索引器示例3.1.定义一个简单的索引器3.2.使用索引器4、索引器进阶4.1.多维索引器4.2.索引器重载5.索引器的注意事项6.总结在C#中,索引器(Indexer)是一种特殊的属性,允许类的实例像数组一样通过索引访问。索引器......
  • 深入浅出Django的路由系统:全面指南与实战示例
    Django的路由系统用于将用户请求的URL与相应的视图函数匹配,它决定了用户访问特定URL时会执行哪个视图函数。通过URL配置,路径匹配,路径参数,命名路由,路由命名空间,包含其他URL配置,以及反向解析,Django实现了高效且灵活的URL路由管理。1.URL配置URL配置是Django项目中定义URL与视......