Unity 功能 之 创建 【Unity Package】 Manager 自己自定义管理的包的简单整理

news2024/11/17 3:17:15

Unity 功能 之 创建 【Unity Package】 Manager 自己自定义管理的包的简单整理

一、简单介绍

Unity Package 是一种模块化的资源管理和分发方式,用于将游戏开发所需的代码、资源、配置文件等内容打包成一个独立的、可重用的组件。Unity Package 可以在多个项目之间共享,从而简化了项目的管理和维护。

为什么要使用 Unity Package

  1. 模块化管理: 将功能、资源和代码模块化,便于维护和更新。
  2. 复用性: 同一个包可以在多个项目中使用,避免重复劳动,提高开发效率。
  3. 版本控制: 可以对包进行版本管理,确保项目中使用的包是稳定和可控的。
  4. 团队协作: 团队成员可以共享和分发自己的包,促进协同开发。
  5. 依赖管理: Unity Package Manager 可以自动处理包之间的依赖关系,简化项目配置。

Unity Package 官网:Unity - Manual: Creating custom packages

二、Unity Package 的目录结构

Package 目录结构说明官网地址:Unity - Manual: Package layout

Packages/
  com.example.mypackage/               # 包的根目录
    package.json                       # 包的配置文件,包含包的元数据和依赖项
    README.md                          # 包的说明文档,提供使用说明和其他信息
    CHANGELOG.md                       # 包的变更日志,记录包的每个版本的更改内容
    LICENSE.md                         # 包的许可证文件,声明包的开源许可证
    Editor/                            # 包含编辑器扩展脚本和资源
      MyEditorScript.cs                # 示例编辑器脚本
    Runtime/                           # 包含运行时脚本和资源
      MyScript.cs                      # 示例运行时脚本
    Tests/                             # 包含测试脚本和测试资源
      Editor/                          # 编辑器测试脚本
        MyEditorTests.cs               # 示例编辑器测试脚本
      Runtime/                         # 运行时测试脚本
        MyRuntimeTests.cs              # 示例运行时测试脚本
    Documentation~                     # 包的文档目录,波浪号表示该目录不会被导入到项目中
      index.md                         # 包的主文档文件
    Samples~                           # 包的示例目录,波浪号表示该目录不会被导入到项目中
      ExampleSample/                   # 示例的具体目录
        SampleScene.unity              # 示例场景文件
        SampleScript.cs                # 示例脚本文件

详细说明

1)package.json

package.json 是包的配置文件,包含包的基本信息和依赖项。例如:

{
  "name": "com.example.mypackage",
  "version": "1.0.0",
  "displayName": "My Package",
  "description": "Description of My Package",
  "unity": "2020.3",
  "dependencies": {
    "com.unity.modules.ui": "1.0.0"
  }
}

2)README.md

README.md 是包的说明文档,通常用于提供包的介绍、安装说明和基本使用方法。

3)CHANGELOG.md

CHANGELOG.md 是包的变更日志,用于记录每个版本的更新内容和变更。

4)LICENSE.md

LICENSE.md 是包的许可证文件,用于声明包的开源许可证,确保用户了解使用包的法律条件。

5)Editor/

Editor/ 目录包含编辑器扩展脚本和资源,这些内容仅在 Unity 编辑器中使用。例如 MyEditorScript.cs 是一个示例编辑器脚本。

6)Runtime/

Runtime/ 目录包含运行时脚本和资源,这些内容将在游戏运行时使用。例如 MyScript.cs 是一个示例运行时脚本。

7)Tests/

Tests/ 目录包含测试脚本和测试资源,分为编辑器测试和运行时测试。

  • Editor/ 包含编辑器测试脚本,例如 MyEditorTests.cs
  • Runtime/ 包含运行时测试脚本,例如 MyRuntimeTests.cs

8)Documentation~

Documentation~ 目录用于存放包的文档文件,波浪号表示该目录不会被导入到项目中。index.md 是包的主文档文件。

10)Samples~

Samples~ 目录用于存放包的示例文件,波浪号表示该目录不会被导入到项目中。示例可以帮助用户了解如何使用包中的功能。

  • ExampleSample/ 目录包含具体的示例,例如 SampleScene.unitySampleScript.cs

下面是一个 TimeLine 的 Package 目录结构

通过以上的目录结构和详细说明,可以更好地理解和组织 Unity Package,从而提高包的可维护性和复用性。在制作自己的包时,确保目录结构清晰、文件组织合理,并提供足够的文档和示例,帮助用户更好地使用包中的功能。

三、package.json 说明

package.json 说明官网地址:Unity - Manual: Package manifest

{
  "name": "com.example.mypackage",          // 必须。包的唯一标识符,通常使用反向域名格式。
  "version": "1.0.0",                       // 必须。包的版本号,遵循语义化版本规范(semver)。
  "displayName": "My Package",              // 必须。包的显示名称,在 Unity 编辑器中显示。
  "description": "Description of My Package", // 必须。包的简短描述。
  "unity": "2020.3",                        // 必须。包兼容的最低 Unity 版本。

  "dependencies": {                         // 可选。包的依赖项,指定其他包的名称和版本。
    "com.unity.modules.ui": "1.0.0"
  },

  "keywords": [                             // 可选。用于描述包的关键词数组,便于搜索和分类。
    "utilities",
    "example",
    "custom"
  ],

  "author": {                               // 可选。包的作者信息,可以包含 name、email 和 url。
    "name": "John Doe",
    "email": "john.doe@example.com",
    "url": "https://example.com"
  },

  "license": "MIT",                         // 可选。包的许可证类型,通常使用 SPDX 许可证标识符。
  
  "repository": {                           // 可选。包的源码存储库信息。
    "type": "git",
    "url": "https://github.com/example/mypackage.git"
  },

  "samples": [                              // 可选。包含包示例的配置。
    {
      "displayName": "Example Sample",      // 示例的显示名称。
      "description": "A simple example sample.", // 示例的描述。
      "path": "Samples~/ExampleSample"      // 示例的路径,通常放在 Samples~ 目录中。
    }
  ],

  "changelogUrl": "https://example.com/mypackage/changelog", // 可选。包变更日志的 URL。

  "documentationUrl": "https://example.com/mypackage/documentation", // 可选。包文档的 URL。

  "issuesUrl": "https://example.com/mypackage/issues", // 可选。包问题追踪的 URL。

  "unityRelease": "2020.3.0f1",             // 可选。指定最低 Unity 修订版本。
  
  "hideInEditor": false                     // 可选。指示包是否在 Unity Package Manager 中隐藏。
}

创建 Unity Package 时,包的文件结构布局非常重要,它决定了包在导入到其他项目中时的组织和使用方式。以下是一个典型的 Unity Package 的文件结构布局详细说明:

1)包根目录:

    Unity Package的所有文件和文件夹都会位于一个根目录下。这个根目录的名称通常是包的名称,用小写字母表示,不包含空格。

2)package.json:

    这是包的清单文件,包含有关包的元信息,如名称、版本、依赖项等。它必须位于包的根目录下。

3)Documentation文件夹(可选):

-这是包的说明文件夹Documentation,可以在其中添加Markdown或HTML文件,以便其他开发者了解如何使用包。

4)Editor文件夹(可选):

    如果包包含一些只在编辑器中使用的功能,可以创建一个名为Editor的文件夹。在这里放置的脚本将只在Unity编辑器环境中执行。

5)Runtime文件夹(可选):

    如果包包含在游戏运行时使用的功能,可以创建一个名为Runtime的文件夹。这里的脚本将在游戏运行时执行。

6)scripts文件夹(可选):

    如果包包含一些通用的C#脚本,可以创建一个名为Scripts的文件夹,并将脚本放置在其中。这可以帮助更好地组织代码。

7)Resources文件夹(可选):

    如果包包含一些资源文件,如纹理、模型、声音等,可以创建一个名为Resources的文件夹,并将资源文件放置在其中。这些资源可以通过Resources.Load函数在运行时加载。

8)Prefabs文件夹(可选):

    如果包包含一些预制体,可以创建一个名为Prefabs的文件夹,并将预制体放置在其中。

9)Scenes文件夹(可选):

    如果包包含一些场景文件,可以创建一个名为Scenes的文件夹,并将场景文件放置在其中。

10)Editor Default Resources文件夹(可选):

    如果包包含在编辑器中使用的资源,例如图标、样式等,可以创建一个名为Editor Default Resources的文件夹,并将资源放置在其中。

11)Tests文件夹(可选):

    如果为包编写了测试,可以创建一个名为Tests的文件夹,并将测试相关的文件和脚本放置在其中。Tests/Editor用于编辑器测试,Tests/Runtime用于运行时测试。

12)Examples文件夹(可选):

    如果为其他开发者提供使用示例,可以创建一个名为Examples的文件夹,并在其中添加演示场景、脚本和资源。

下面是 Timeline 的 package.json 示例 :

{
  "name": "com.unity.timeline",
  "displayName": "Timeline",
  "version": "1.6.4",
  "unity": "2019.3",
  "keywords": [
    "unity",
    "animation",
    "editor",
    "timeline",
    "tools"
  ],
  "description": "Use Unity Timeline to create cinematic content, game-play sequences, audio sequences, and complex particle effects.",
  "dependencies": {
    "com.unity.modules.director": "1.0.0",
    "com.unity.modules.animation": "1.0.0",
    "com.unity.modules.audio": "1.0.0",
    "com.unity.modules.particlesystem": "1.0.0"
  },
  "relatedPackages": {
    "com.unity.timeline.tests": "1.6.4"
  },
  "upmCi": {
    "footprint": "dcac7462836a5fa5813cc1e2c6080df1da992327"
  },
  "repository": {
    "url": "https://github.cds.internal.unity3d.com/unity/com.unity.timeline.git",
    "type": "git",
    "revision": "d7e1eb6805737974459309b7d6e7db58635dd167"
  },
  "samples": [
    {
      "displayName": "Customization Samples",
      "description": "This sample demonstrates how to create custom timeline tracks, clips, markers and actions.",
      "path": "Samples~/Customization"
    },
    {
      "displayName": "Gameplay Sequence Demo",
      "description": "This sample demonstrates how Timeline can be used to create a small in-game moment, using built-in Timeline tracks.",
      "path": "Samples~/GameplaySequenceDemo"
    }
  ]
}

四、程序集定义

1、程序集定义说明

程序集相关官网地址:程序集定义 (Assembly Definition) 属性 - Unity 手册

程序集(Assembly)是 .NET 中的基本构件单元,它包含了代码和资源。程序集通常以 .dll.exe 文件的形式存在,包含了编译好的中间语言代码(CIL),元数据和资源文件。程序集在 .NET 框架中扮演着重要的角色,负责类型定义、类型解析、代码安全、代码执行和资源管理。

为什么 Unity Package 需要做成程序集

在 Unity 中,使用程序集有多个优点:

  1. 模块化和组织

    • 程序集可以将代码组织成独立的模块,使代码更容易管理和维护。
    • 通过将相关功能打包到单独的程序集,可以减少代码库的复杂性,提高可读性和可维护性。
  2. 编译和性能优化

    • 使用程序集可以减少编译时间。Unity 在编译时只会重新编译受影响的程序集,而不是整个项目。
    • 程序集允许更细粒度的编译和优化,减少不必要的编译步骤。
  3. 代码隔离

    • 程序集提供了一种在逻辑上隔离代码的方法,避免不同模块之间的命名冲突和依赖混乱。
    • 通过将代码隔离在不同的程序集内,可以更好地管理依赖关系和版本控制。
  4. 版本控制和依赖管理

    • 程序集允许版本控制和依赖管理,使得包的不同版本可以共存,并且可以明确地指定依赖项的版本。
    • 这有助于确保项目中使用的程序集是稳定且兼容的版本。
  5. 安全性和权限管理

    • 程序集可以定义代码访问权限和安全策略,确保只有受信任的代码可以执行特定操作。
    • 通过程序集,可以更好地控制代码的访问权限和执行环境,提高安全性。
  6. 重用和分发

    • 程序集使得代码可以方便地重用和分发。一个程序集可以在多个项目中使用,避免重复编写代码。
    • 通过将功能模块打包成程序集,可以方便地共享和分发功能,提高开发效率。

在 Unity Package 中创建程序集

在 Unity Package 中创建程序集主要通过 .asmdef 文件来实现。.asmdef 文件是 Assembly Definition File,用于定义一个程序集。以下是创建和配置程序集的步骤:

  1. 创建 Assembly Definition File

    • 在 Unity 项目窗口中,右键单击需要创建程序集的目录,然后选择 Create > Assembly Definition
    • 这将在该目录下创建一个新的 .asmdef 文件。
  2. 配置 Assembly Definition File

    • 选中创建的 .asmdef 文件,在检查器窗口中进行配置。
    • 设置程序集的名称,添加需要引用的程序集,设置编译平台等。
  3. 组织代码和资源

    • 将相关的代码和资源放入程序集对应的目录中。
    • 通过 .asmdef 文件,Unity 会将这些代码和资源编译成一个独立的程序集。

2、.asmdef 文件(Assembly Definition File)配置信息说明

.asmdef 文件(Assembly Definition File)在 Unity 中用于定义和配置程序集。通过 .asmdef 文件,可以指定程序集的名称、引用、编译选项等。

{
  "name": "MyCompany.MyPackage.Runtime",  // 程序集名称 (必须字段)
  
  "references": [                        // 依赖的其他程序集 (可选)
    "UnityEngine",
    "MyCompany.MyPackage.Utilities"
  ],
  
  "includePlatforms": [                  // 包含的平台 (可选)
    "Editor",                            // 例如,Editor 平台
    "Standalone",                        // 例如,Standalone 平台
    "iOS",                               // 例如,iOS 平台
    "Android"                            // 例如,Android 平台
  ],
  
  "excludePlatforms": [                  // 排除的平台 (可选)
    "WebGL",                             // 例如,WebGL 平台
    "PS4"                                // 例如,PS4 平台
  ],
  
  "allowUnsafeCode": true,               // 是否允许不安全代码 (可选,默认为 false)
  
  "overrideReferences": true,            // 是否覆盖默认程序集引用 (可选,默认为 false)
  
  "precompiledReferences": [             // 预编译程序集引用 (可选)
    "SomePrecompiledLib.dll"             // 例如,预编译的库文件
  ],
  
  "autoReferenced": false,               // 是否自动引用此程序集 (可选,默认为 true)
  
  "defineConstraints": [                 // 编译符号约束 (可选)
    "DEBUG",                             // 例如,DEBUG 符号
    "EXPERIMENTAL_FEATURE"               // 例如,实验性功能符号
  ],
  
  "versionDefines": [                    // 根据包版本定义编译符号 (可选)
    {
      "name": "com.unity.render-pipelines.core",  // 包名称
      "expression": "10.0.0",                     // 版本表达式
      "define": "UNITY_RENDER_PIPELINE_CORE_10"   // 定义的符号
    }
  ],
  
  "noEngineReferences": true             // 是否排除对 UnityEngine 和 UnityEditor 的引用 (可选,默认为 false)
}

字段说明

  • name

    • 类型: string
    • 说明: 必须字段。程序集的名称。
    • 示例: "name": "Example.Utilities.Runtime"
  1. references

    • 类型: string[]
    • 说明: 可选字段。该程序集所依赖的其他程序集的名称列表。
    • 示例: "references": ["UnityEngine", "UnityEditor"]
  2. includePlatforms

    • 类型: string[]
    • 说明: 可选字段。指定程序集包含的目标平台。可以为 EditorStandaloneiOSAndroid 等。若不指定,则默认包含所有平台。
    • 示例: "includePlatforms": ["Editor", "Standalone", "iOS", "Android"]
  3. excludePlatforms

    • 类型: string[]
    • 说明: 可选字段。指定程序集排除的目标平台。与 includePlatforms 互斥。
    • 示例: "excludePlatforms": []
  4. allowUnsafeCode

    • 类型: boolean
    • 说明: 可选字段。是否允许使用不安全代码(unsafe 关键字)。
    • 示例: "allowUnsafeCode": false
  5. overrideReferences

    • 类型: boolean
    • 说明: 可选字段。是否覆盖默认的程序集引用。若设置为 true,则必须在 precompiledReferences 字段中列出所有需要的程序集。
    • 示例: "overrideReferences": false
  6. precompiledReferences

    • 类型: string[]
    • 说明: 可选字段。指定预编译程序集的名称列表,仅在 overrideReferencestrue 时有效。
    • 示例: "precompiledReferences": []
  7. autoReferenced

    • 类型: boolean
    • 说明: 可选字段。是否自动引用此程序集。如果设置为 false,则需要手动在其他程序集的 references 中添加此程序集。
    • 示例: "autoReferenced": true
  8. defineConstraints

    • 类型: string[]
    • 说明: 可选字段。指定编译时需要定义的符号(宏定义)。仅在所有符号都定义时,程序集才会编译。
    • 示例: "defineConstraints": []
  9. versionDefines

    • 类型: object[]
    • 说明: 可选字段。根据包版本定义编译符号。用于在特定包版本存在时定义符号。
    • 示例:
      "versionDefines": [
        {
          "name": "SOME_PACKAGE",
          "expression": "2.0.0",
          "define": "SOME_PACKAGE_2_0_0"
        }
      ]
      
  10. noEngineReferences

    • 类型: boolean
    • 说明: 可选字段。是否排除对 UnityEngine 和 UnityEditor 程序集的引用。
    • 示例: "noEngineReferences": false

下面是 asmdef  文件(Assembly Definition File)示例:

五、简单实现一个自定义的 Unity Package

1、新建一个工程

2、创建一个测试的目录,结构如下

3、简单创建一个脚本,添加一些用来测试的函数

4、创建 MyUnityPackageTest 的 asmdef  文件(Assembly Definition File)

asmdef  文件根据需要配置,例如平台、依赖

5、可在任意位置,创建文件夹,用来构建 package 目录结构

6、添加 CHANGELOG.md、LICENSE.md、README.md 到文件夹中

根据自己的需要进行填写内容

1)CHANGELOG.md

2)LICENSE.md

3)REASDME.md

7、添加 package.json 到文件夹中

内容根据需要配置,这里简单配置,作为参考

(name : 注意全是小写,不要大写字母)

{
	"name": "com.xxxx.myunitypackagetest",
	"displayName": "My Unity Package Test",
	"description": "My Unity Package Test",
	"version": "1.0.0",
	"unity": "2021.3",
	"keywords": [
		"unity",
		"xx",
		"tools"
	]
}

8、添加一个 Runtime 文件夹

9、把 Unity 工程的 MyUnityPackageTest 文件夹及其所有内容拷贝

10、把拷贝的内容粘贴到 之前的 Runtime 文件夹

11、到目前为止,一个简单的 Unity Package 基本制作完成

12、新建一个Unity 工程,来测试上面制作的 Unity Package

13、菜单栏 Window - Package Manager ,弹出窗口左上角 + ,点击 Add package from disk... 选择之前制作的 Unity Package 添加进入工程

14、选择之前制作的 Unity Package 的 package.json,添加到工程

15、接下来测试一下导入的 Package 功能

16、创建测试脚本

17、把脚本挂载到场景中,运行打印如下

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

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

相关文章

深入理解 “androidx.databinding.DataBindingUtil“ 细节和使用

介绍 数据绑定(Data Binding)是 Android 中的一个强大功能,它允许你使用声明性格式而不是编程方式将布局中的 UI 组件绑定到应用中的数据源。androidx.databinding.DataBindingUtil 类是一个工具类,它提供了用于处理数据绑定的方…

GlimmerHMM安装与使用-生信工具24

GlimmerHMM 01 概述 GlimmerHMM是一种基于广义隐马尔科夫模型(GHMM)的新型基因预测工具。虽然该基因预测工具符合GHMM的总体数学框架,但它还结合了从GeneSplicer程序中改编的剪接位点模型。可变长度的特征状态(例如外显子、内含…

Vue 结合 Element-UI ,管理系统快速生成指南(一)

前言 Element UI 作为一个基于 Vue.js 的 UI 组件库,提供了丰富的界面元素和交互组件,大大提高了开发效率。结合这两大前端技术栈,开发者能够快速搭建出一个功能强大、界面优雅的管理系统。 由于管理系统实现流程还是相对较多,所以分几篇文章进行讲解 本章主要先…

安装docker compose与elasticsearch,kibana

1.docker compose安装 1.1是否已安装docker docker -v 1.2安装docker compose curl -SL https://github.com/docker/compose/releases/download/v2.18.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-composeps:如果网络太慢可直接在博客中下载附属文件 下载后修…

实现Ubuntu计划任务的反弹shell

一、实验环境 Ubuntu:IP地址:192.168.223.156 Kali : IP地址:192.168.223.152 二、编写crontab计划任务 在Ubuntu的系统中使用crontab -e命令编写计划任务,如下所示: 作用:是将一个交互式的bash …

Bootstrap 缩略图

Bootstrap 缩略图 引言 Bootstrap 是一个流行的前端框架,它提供了一套丰富的组件和工具,帮助开发者快速构建响应式和移动优先的网页。缩略图(Thumbnails)是 Bootstrap 中的一种组件,用于展示图片或其他媒体内容,通常与标题和文本描述一起使用,形成一个整洁的布局。本文…

Vue-element 组件dialog右上角点击 X 清空表单校验信息

问题: 点击确定触发校验后,点击弹窗右上角的 X号关闭弹窗后再次打开弹窗,校验规则没有被清空 解决方法:

Java案例找素数(三种方法)

目录 一:问题: 二:思路分析: 三:具体代码: 四:运行结果: 一:问题: 二:思路分析: 三:具体代码: Ⅰ&#xf…

[图解]SysML和EA建模住宅安全系统-05-参数图

1 00:00:01,140 --> 00:00:03,060 这是实数没错,这是分钟 2 00:00:03,750 --> 00:00:07,490 但是你在这里选,选不了的 3 00:00:07,500 --> 00:00:09,930 因为它这里不能够有那个 4 00:00:11,990 --> 00:00:13,850 但是我们前面这里 5 00…

Python中常见的网络爬虫问题及解决方案

Python中常见的网络爬虫问题及解决方案 概述: 随着互联网的发展,网络爬虫已经成为数据采集和信息分析的重要工具。而Python作为一种简单易用且功能强大的编程语言,被广泛应用于网络爬虫的开发。然而,在实际开发过程中&#xff0c…

ONLYOFFICE8.1版本桌面编辑器的测评(您的私人办公室)

ONLYOFFICE官网链接:ONLYOFFICE - 企业在线办公应用软件 | ONLYOFFICE 在线PDF查看器和转换器 | ONLYOFFICE​​​​​​在线办公套件 | ONLYOFFICE 一,引言 在数字化浪潮中,高效、便捷、安全的办公工具对现代职场至关重要。今天,…

2024 年江西省研究生数学建模竞赛题目 A题交通信号灯管理--完整思路、代码结果分享(仅供学习)

交通信号灯是指挥车辆通行的重要标志,由红灯、绿灯、 黄灯组成。红灯停、绿灯行,而黄灯则起到警示作用。交通 信号灯分为机动车信号灯、非机动车信号灯、人行横道信号 灯、方向指示灯等。 一般情况下,十字路口有东西向和南北向 4 个方向的车…

7.1.SQL注入-基于函数报错的方式来利用updatexml()

基于函数报错的方式来进行利用-字符型(本页updatexml()) 前提条件是后台数据库没有屏蔽数据库语法报错信息 updatexml()方法详解 注释: 第一个参数,意思就是xml文档的名称 第二个参数,意思就是定位到xml文档中指定…

JVM原理(十):JVM虚拟机调优分析与实战

1. 大内存硬件上的程序部署策略 这是笔者很久之前处理过的一个案例,但今天仍然具有代表性。一个15万PV/日左右的在线文档类型网站最近更换了硬件系统,服务器的硬件为四路志强处理器、16GB物理内存,操作系统为64位CentOS5.4,Resin…

神经网络训练(一):基于残差连接的图片分类网络(ResNet18)

目录 一、简介:二、图片分类网络1.记载训练数据(torch自带的cifa10数据集)2.数据增强3.模型构建4.模型训练三、完整源码及文档一、简介: 基于残差连接的图片分类网络,本网络使用ResNet18作为基础模块,根据cifa10的特点进行改进网络,使用交叉熵损失函数和SGD优化器。本网…

讨论Nginx服务器的反爬虫和反DDoS攻击策略

Nginx服务器是一个高性能的Web服务器和反向代理服务器,具有强大的反爬虫和反DDoS攻击能力。本文将讨论Nginx服务器的反爬虫和反DDoS攻击策略,并给出相关的代码示例。 一、反爬虫策略 爬虫是一种自动化程序,用于从互联网上收集特定网站的数据…

网站被浏览器提示“不安全”的解决办法

在互联网时代,网站的安全性直接关系到用户体验和品牌形象。当用户访问网站时,如果浏览器出现“您与此网站之间建立的连接不安全”的警告,这不仅会吓跑潜在客户,还可能对网站的SEO排名造成等负面影响。 浏览器发出的“不安全”警告…

经典案列|淘宝商品数据爬取与分析

商品详情页 API接口测试代码 -- 请求示例 url 默认请求参数已经URL编码处理 curl -i "https://api-服务器.cn/taobao/item_get/?key<您自己的apiKey>&secret<您自己的apiSecret>&num_iid45887133725&is_promotion1" API测试页 商品详情页返…

Redis Cluster 模式 的具体实施细节是什么样的?

概述 参考&#xff1a;What are Redis Cluster and How to setup Redis Cluster locally ? | by Rajat Pachauri | Medium Redis Cluster 的工作原理是将数据分布在多个节点上&#xff0c;同时确保高可用性和容错能力。以下是 Redis Cluster 运行方式的简要概述&#xff1a; …

九浅一深Jemalloc5.3.0 -- ④浅*配置

目前市面上有不少分析Jemalloc老版本的博文&#xff0c;但最新版本5.3.0却少之又少。而且5.3.0的架构与5之前的版本有较大不同&#xff0c;本着“与时俱进”、“由浅入深”的宗旨&#xff0c;我将逐步分析最新release版本Jemalloc5.3.0的实现。 另外&#xff0c;单讲实现代码是…