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

Newton GPU 机器人仿真器入门教程(零)— NVIDIA、DeepMind、Disney 联合推出

系列文章目录

目录

系列文章目录

前言

一、快速入门

1.1 实时渲染

1.2 USD 渲染

1.3 示例:创建一个粒子链

二、重要概念

三、API 参考

3.1 求解器

3.1.1 XPBD 求解器

 3.1.2 VBD 求解器

3.1.3 MuJoCo 求解器

3.2 关节控制模式

四、Newton 集成

4.1 Isaac Lab 

4.2 MuJoCo

五、warp.sim 迁移指南

5.1 求解器

5.2 导入器

5.2.1 模型

5.2.2 模型构建器

5.3 渲染器

六、扩展 Newton

七、开发指南

7.1 环境设置

7.1.1 使用 uv

7.1.2 使用 venv

7.2 运行测试

7.3 代码格式化和内核

7.4 构建文档

7.4.1 使用 uv

7.4.2 使用 venv

7.5 测试文档代码片段

7.6 打包

八、贡献指南

8.1 代码贡献

九、常见问题(FAQ)

十、稳定性政策


前言

        本项目正处于活跃的 alpha 开发阶段。这意味着 API 不稳定,功能可能会被添加或移除,并且随着设计的完善,可能会经常出现未经通知的破坏性更改。

        Newton 是一个基于英伟达™(NVIDIA®)Warp 的 GPU 加速物理仿真引擎,主要面向机器人专家和仿真研究人员。它扩展和概括了 Warp 现有的 warp.sim 模块,并将 MuJoCo Warp 集成为主要后端。牛顿强调基于 GPU 的计算、可微分性和用户定义的可扩展性,有利于快速迭代和可扩展的机器人仿真。

        牛顿由迪斯尼研究院、谷歌 DeepMind 和英伟达公司共同维护。


一、快速入门

1.1 实时渲染

        Newton 提供了一个简单的 OpenGL 渲染器,用于可视化模拟。渲染器需要安装 pyglet(版本 >= 2.0)。

renderer = newton.utils.SimRendererOpenGL(model=model, path="Newton Simulator", scaling=2.0)# at every frame:
renderer.begin_frame(sim_time)
renderer.render(state)
renderer.end_frame()# pause the simulation (blocks the control flow):
renderer.pause = True

        使用 OpenGLRenderer(又名 newton.utils.SimRendererOpenGL)时的键盘快捷键:

键盘快捷键

Key(s)

Description

WASD (or arrow keys) + mouse drag

像在 FPS 游戏中一样移动摄像头

X

切换线框渲染

B

切换背面剔除

C

切换坐标系轴的可见性

G

切换地面网格

D

切换深度渲染

I

切换左上角的信息文本

SPACE

暂停/继续模拟

TAB

跳过渲染,在后台继续模拟(可在运行渲染器时加快 RL 训练速度)

1.2 USD 渲染

        您也可以将模拟渲染为时间采样的美元阶段,以便在 Omniverse 中可视化,而不是实时渲染。

renderer = newton.utils.SimRenderer(model=model, path="simulation.usd", scaling=2.0)# at every frame:
renderer.begin_frame(sim_time)
renderer.render(state)
renderer.end_frame()# to save the USD stage:
renderer.save()

1.3 示例:创建一个粒子链

import newtonbuilder = newton.ModelBuilder()# anchor point (zero mass)
builder.add_particle((0, 1.0, 0.0), (0.0, 0.0, 0.0), 0.0)# build chain
for i in range(1, 10):builder.add_particle((i, 1.0, 0.0), (0.0, 0.0, 0.0), 1.0)builder.add_spring(i - 1, i, 1.0e3, 0.0, 0)model = builder.finalize("cpu")print(f"{model.spring_indices.numpy()=}")
print(f"{model.particle_count=}")
print(f"{model.particle_mass.numpy()=}")
model.spring_indices.numpy()=array([0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9], dtype=int32)
model.particle_count=10
model.particle_mass.numpy()=array([0., 1., 1., 1., 1., 1., 1., 1., 1., 1.], dtype=float32)

二、重要概念

三、API 参考

3.1 求解器

3.1.1 XPBD 求解器

class newton.solvers.XPBDSolver(model=None, iterations=2, soft_body_relaxation=0.9, soft_contact_relaxation=0.9, joint_linear_relaxation=0.7, joint_angular_relaxation=0.4, rigid_contact_relaxation=0.8, rigid_contact_con_weighting=True, angular_damping=0.0, enable_restitution=False)

        使用基于位置的扩展动力学 (XPBD) 的隐式积分器,用于刚体和软体仿真。

参考文献

  • Miles Macklin、Matthias Müller 和 Nuttapong Chentanez。2016. XPBD:基于位置的顺应约束动力学仿真。第九届国际游戏运动大会(MIG '16)论文集。美国计算机协会,纽约州纽约市,49-54。https://doi.org/10.1145/2994258.2994272
  • Matthias Müller, Miles Macklin, Nuttapong Chentanez, Stefan Jeschke, and Tae-Yong Kim. 2020. 基于扩展位置动力学的详细刚体仿真。ACM SIGGRAPH/Eurographics 计算机动画研讨会(SCA '20)论文集》。欧洲图形协会,德国戈斯拉尔,第 10 条,1-12。https://doi.org/10.1111/cgf.14105。

        在构建模型、状态和控制(可选)对象后,可使用时间积分器将模拟状态在时间上向前推进。

        示例

solver = newton.XPBDSolver(model)# simulation loop
for i in range(100):solver.step(model, state_in, state_out, control, contacts, dt)

 3.1.2 VBD 求解器

class newton.solvers.VBDSolver(model, iterations=10, handle_self_contact=False, penetration_free_conservative_bound_relaxation=0.42, friction_epsilon=1e-2, body_particle_contact_buffer_pre_alloc=4, vertex_collision_buffer_pre_alloc=32, edge_collision_buffer_pre_alloc=64, triangle_collision_buffer_pre_alloc=32, edge_edge_parallel_epsilon=1e-5)

        使用顶点块下降 (VBD) 的隐式积分器,用于布料模拟。

参考文献

  • Anka He Chen, Ziheng Liu, Yin Yang, and Cem Yuksel. 2024. 顶点块下降。ACM Trans. Graph. 43, 4, Article 116 (July 2024), 16 pages. https://doi.org/10.1145/3658179

        请注意,VBDSolver 的构造函数需要一个 Model 对象作为输入,以便进行一些预计算和预分配空间。构建完成后,您必须提供与构建过程中使用的相同的模型对象。目前,您必须手动提供粒子着色并将其分配给 model.particle_color_groups,才能使 VBD 正常工作。

        VBDSolver.simulate 接受三个参数:class:Model(类)、State(状态)和 Control(控制)(可选)对象。

        示例

model.particle_color_groups = # load or generate particle coloring
solver = newton.VBDSolver(model)# simulation loop
for i in range(100):solver.step(model, state_in, state_out, control, contacts, dt)

3.1.3 MuJoCo 求解器

class newton.solvers.MuJoCoSolver(model, *, mjw_model=None, mjw_data=None, separate_envs_to_worlds=None, nefc_per_env=100, ncon_per_env=None, iterations=20, ls_iterations=10, solver='cg', integrator='euler', use_mujoco=False, disable_contacts=False, register_collision_groups=True, joint_damping=0.05, default_actuator_gear=None, actuator_gears=None, update_data_every=1, save_to_mjcf=None)

        该求解器提供了一个使用 MuJoCo 物理引擎模拟物理的接口,并通过 mujoco_warp 优化了 GPU 加速。它同时支持 MuJoCo 和 mujoco_warp 后端,可高效模拟带有接触和约束的铰接系统。

注意事项

  • 该求解器需要安装 mujoco_warp 及其依赖项。
  • 有关安装说明,请参阅 mujoco_warp 软件源。

        示例

solver = newton.MuJoCoSolver(model)# simulation loop
for i in range(100):solver.step(model, state_in, state_out, control, contacts, dt)

3.2 关节控制模式

        关节模式控制关节控制输入 Control.joint_act 如何影响施加在给定关节轴上的扭矩。默认情况下,它通过 JOINT_MODE_FORCE 直接施加力。其他模式可用于实现关节位置或速度驱动:

  • joint_mode_force

        这是默认的控制模式,控制输入是施加在关节轴上的扭矩 \tau

  • joint_mode_target_position (目标位置模式

        控制输入是目标位置 \mathbf{q}_{\mathrm{target}},通过对扭矩 \tau 的 PD 控制来实现,其中比例和导数增益由 Model.joint_target_ke 和 Model.joint_target_kd 设置:

\tau=k_e(\mathbf{q}_{\mathrm{target}}-\mathbf{q})-k_d\mathbf{\dot{q}}

  • JOINT_MODE_TARGET_VELOCITY

        控制输入是目标速度 \dot{\mathbf{q}}_{\mathrm{target}},通过比例增益 Model.joint_target_ke 实现扭矩 \tau 控制,使关节轴上的速度达到目标速度:

\tau=k_e(\mathbf{\dot{q}_{target}}-\mathbf{\dot{q}})

四、Newton 集成

4.1 Isaac Lab 

4.2 MuJoCo

五、warp.sim 迁移指南

        本指南旨在帮助用户将其应用程序从 warp.sim 迁移到 Newton。

5.1 求解器

warp.sim

Newton

warp.sim.FeatherstoneIntegrator

newton.solvers.FeatherstoneSolver

warp.sim.SemiImplicitIntegrator

newton.solvers.SemiImplicitSolver

warp.sim.VBDIntegrator

newton.solvers.VBDSolver

warp.sim.XPBDIntegrator

newton.solvers.XPBDSolver

integrator.simulate(self.model, self.state0, self.state1, self.dt, None)

solver.step(self.model, self.state0, self.state1, self.control, None, self.dt)

5.2 导入器

warp.sim

Newton

warp.sim.parse_urdf()

newton.utils.parse_urdf()

warp.sim.parse_mjcf()

newton.utils.parse_mjcf()

warp.sim.parse_usd()

newton.utils.parse_usd()

warp.sim.resolve_usd_from_url()

newton.utils.import_usd.resolve_usd_from_url()

5.2.1 模型

        ModelShapeGeometry.is_solid 现在的 dtype 是 bool,而不是 wp.uint8。

5.2.2 模型构建器

warp.sim

Newton

ModelBuilder.add_body(origin=..., m=...)

ModelBuilder.add_body(xform=..., mass=...)

ModelBuilder._add_shape()

ModelBuilder.add_shape()

ModelBuilder.add_shape_*(pos=..., rot=...)

ModelBuilder.add_shape_*(xform=...)

5.3 渲染器

warp.sim

Newton

warp.sim.render.SimRenderer

newton.utils.SimRenderer

warp.sim.render.SimRendererUsd

newton.utils.SimRendererUsd

warp.sim.render.SimRendererOpenGL

newton.utils.SimRendererOpenGL

六、扩展 Newton

        本节介绍如何使用新的求解器和碰撞检测算法扩展 Newton。

七、开发指南

        本文档是为希望为项目做出贡献的开发人员提供的指南。

7.1 环境设置

        克隆版本库

git clone git@github.com:newton-physics/newton.git
cd newton

7.1.1 使用 uv

        uv 是一个 Python 软件包和项目管理器。

        安装 uv:

# On macOS and Linux.
curl -LsSf https://astral.sh/uv/install.sh | sh# On Windows.
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

        运行基本示例:

# An example with basic dependencies
uv run newton/examples/example_quadruped.py# An example that requires extras
uv run --all-extras newton/examples/example_humanoid.py

        更新项目锁文件中的所有依赖项,运行后记得提交 uv.lock:

uv lock -U

7.1.2 使用 venv

        本说明适用于希望使用 venv 或 Conda(如 Miniforge)建立开发环境的用户。

python -m venv .venvOn macOS and Linux.
source .venv/bin/activateOn Windows (console).
.venv\Scripts\activate.batOn Windows (PowerShell).
.venv\Scripts\Activate.ps1

        安装依赖项,包括可选项:

python -m pip install mujoco --pre -f https://py.mujoco.org/
python -m pip install warp-lang --pre -U -f https://pypi.nvidia.com/warp-lang/
python -m pip install git+https://github.com/google-deepmind/mujoco_warp.git@main
python -m pip install -e .[dev]

        运行基本示例:

# An example with basic dependencies
python newton/examples/example_quadruped.py# An example that requires extras
python newton/examples/example_humanoid.py

7.2 运行测试

        Newton 测试套件可通过 uv run -m newton.tests 或 python -m newton.tests 运行。默认情况下,测试套件将在最多八个进程上并行执行。通过 --help 标志可查看测试运行器的可用选项。

        某些测试使用可选依赖项(如 usd-core),如果未安装,则会跳过。

        使用 uv 时,可以通过运行以下命令,在安装了所有附加组件的情况下运行测试套件:

uv run --all-extras -m newton.tests

        使用 venv 时,可从版本库的根目录运行 python -m pip install -e .[dev] 来安装测试套件的附加组件。

        代码覆盖率报告需要安装 coverage[toml],可以通过在测试命令中附加 --coverage --coverage-html 标记来生成,例如

uv run --all-extras -m newton.tests --coverage --coverage-html htmlcov

        可使用网络浏览器打开文件 htmlcov/index.html,查看覆盖率报告。

7.3 代码格式化和内核

        预提交(pre-commit)可用于确保本地代码符合 Newton 的检查。从版本库顶部运行

# With uv installed
uvx pre-commit run -a# With venv
python -m pip install pre-commit
pre-commit run -a

        自动运行 git commit 的预提交钩子:

# With uv installed
uvx pre-commit install# With venv
pre-commit install

        可通过预提交卸载卸载钩子。

7.4 构建文档

        以下是构建文档的几种方法。

7.4.1 使用 uv

rm -rf docs/_build
uv run --extra docs sphinx-build -W -b html docs docs/_build/htmlAlternatively using the Makefile
uv sync --extra docs
source .venv/bin/activate
cd docs
make clean
make html

7.4.2 使用 venv

python -m pip install -e .[docs]
python -m sphinx -W -b html docs docs/_build/html# Alternatively using the Makefile
cd docs
make clean
make html

7.5 测试文档代码片段

        doctest Sphinx 生成器用于确保文档中的代码片段保持最新。

        可以通过以下方式运行 doctests

# With uv installed
uv run --extra docs sphinx-build -W -b doctest docs docs/_build/doctest# With venv
python -m sphinx -W -b doctest docs docs/_build/doctest

        更多信息,请参阅 sphinx.ext.doctest 文档。

7.6 打包

        要生成 .whl 文件(例如,测试分发包的创建),请运行

uv build --wheel

        输出结果将放在 dist/ 子目录下。

八、贡献指南

        为开发 Newton 做出贡献的方式包括

  • 在 GitHub 上报告错误和申请新功能。
  • 在 GitHub 上提问、分享您的工作或参与讨论主题。
  • 向 Newton 代码库添加新示例。
  • 改进文档。
  • 贡献错误修复或新功能。

8.1 代码贡献

        欢迎社区贡献代码。我们不需要正式的《贡献者许可协议》(CLA),而是使用《开发者原产地证书》(Developer Certificate of Origin)来确保贡献者有权向本项目提交贡献。请确保所有提交都添加了签名,签名的电子邮件地址必须与提交作者的电子邮件地址一致,以同意 DCO 条款对每项特定贡献的规定。

DCO 全文如下:

Version 1.1

Copyright (C) 2004, 2006 The Linux Foundation and its contributors.

Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.


Developer's Certificate of Origin 1.1

By making a contribution to this project, I certify that:

(a) The contribution was created in whole or in part by me and I
    have the right to submit it under the open source license
    indicated in the file; or

(b) The contribution is based upon previous work that, to the best
    of my knowledge, is covered under an appropriate open source
    license and I have the right under that license to submit that
    work with modifications, whether created in whole or in part
    by me, under the same open source license (unless I am
    permitted to submit under a different license), as indicated
    in the file; or

(c) The contribution was provided directly to me by some other
    person who certified (a), (b) or (c) and I have not modified
    it.

(d) I understand and agree that this project and the contribution
    are public and that a record of the contribution (including all
    personal information I submit with it, including my sign-off) is
    maintained indefinitely and may be redistributed consistent with
    this project or the open source license(s) involved.

        我们鼓励贡献者首先在 GitHub 上开启一个问题,讨论建议的功能贡献,并评估潜在的兴趣。

九、常见问题(FAQ)

十、稳定性政策

相关文章:

Newton GPU 机器人仿真器入门教程(零)— NVIDIA、DeepMind、Disney 联合推出

系列文章目录 目录 系列文章目录 前言 一、快速入门 1.1 实时渲染 1.2 USD 渲染 1.3 示例:创建一个粒子链 二、重要概念 三、API 参考 3.1 求解器 3.1.1 XPBD 求解器 3.1.2 VBD 求解器 3.1.3 MuJoCo 求解器 3.2 关节控制模式 四、Newton 集成 4.1 Is…...

《零基础学机器学习》学习大纲

《零基础学机器学习》学习大纲 《零基础学机器学习》采用对话体的形式,通过人物对话和故事讲解机器学习知识,使内容生动有趣、通俗易懂,降低了学习门槛,豆瓣高分9.1分,作者权威。 接下来的数篇文章,我将用…...

CSS 基础知识分享:从入门到注意事项

什么是CSS? CSS是用于描述HTML或XML文档呈现方式的语言。它控制网页的布局、颜色、字体等视觉表现,让内容与表现分离。 通俗的说,html是骨头,那么css就是他的画皮。 基本语法 CSS规则由两部分组成:选择器和声明块。…...

深入浅出理解JavaScript原型与原型链

先让我们结合生活案例理解原型原型链相关概念,想象一下一个大家庭,有很多成员。 1. 原型 (Prototype) - 家族的共同特征或技能模板 概念对应: 家族中代代相传的共同特征、习惯、或者家族里独有的某个手艺或知识。例子: 假设你们家族的成员普遍都有高个子、善于烹饪一道祖传菜…...

重操旧业,做起了OnlineTool.cc在线工具站

最近闲来无事,做了个在线工具站。 工具不多,起码有:当前IP查询,QRCode二维码生成,图片压缩,JSON格式化,简体繁体转换,等。 使用Astro框架React,Caddy,目前是…...

vue 中的数据代理

在 Vue 中,数据代理(Data Proxy) 是 Vue 实现 MVVM 模式 的关键技术之一。Vue 使用数据代理让你可以通过 this.message 访问 data.message,而不需要写 this.data.message —— 这大大简化了模板和逻辑代码。 我们来深入理解它的本…...

ubuntu安装Go SDK

# 下载最新版 Go 安装包(以 1.21.5 为例) wget https://golang.google.cn/dl/go1.21.5.linux-amd64.tar.gz # 解压到系统目录(需要 root 权限) sudo tar -C /usr/local -xzf go1.21.5.linux-amd64.tar.gz # 使用 Go 官方安装脚本…...

【C++】学习、项目时Debug总结

这里写目录标题 1. 内存问题1.1. 内存泄漏1.1.1. 内存泄漏案例检查方法1.1.2. 主线程提前退出导致【控】1.1.3. PostThreadMessage失败导致的内存泄漏**【控】**1.1.4. SendMessage 时关闭客户端【控】1.1.5. 线程机制导致【**控】**1.1.6. exit(0)导致【…...

26考研——中央处理器_指令流水线_指令流水线的基本概念 流水线的基本实现(5)

408答疑 文章目录 六、指令流水线指令流水线的基本概念流水线的基本实现流水线设计的原则流水线的逻辑结构流水线的时空图表示 八、参考资料鲍鱼科技课件26王道考研书 六、指令流水线 前面介绍的指令都是在单周期处理机中采用串行方法执行的,同一时刻 CPU 中只有一…...

Flutter——数据库Drift开发详细教程(三)

目录 参考正文核心API写入(更新、插入、删除)1.更新和删除2.使用 SQL 表达式更新3.插入件4.更新插入5.返回 参考 https://drift.simonbinder.eu/dart_api/writes/#updating-with-sql-expressions 正文核心API 写入(更新、插入、删除&#…...

AI Agent-基础认知与架构解析

定义 AI Agent 可以理解为一种具备感知、决策和行动能力的智能实体,能够在复杂的环境中自主运行,并根据环境变化动态调整自身行为,以实现特定目标。与传统的人工智能程序相比,AI Agent 具有更强的自主性、交互性和适应性。它不仅能…...

privateGPT和RAGflow之间的区别

PrivateGPT和RAGFlow都是基于RAG(检索增强生成)技术的开源项目,但它们在设计目标、技术架构和应用场景上有显著差异。以下是两者的详细对比分析: 1. 核心定位与设计目标 PrivateGPT 隐私优先:专注于完全离线的私有化部署,确保用户数据不离开本地环境,适合对隐私要求极高…...

C语言--字符函数

C语言--字符函数 一、字符函数1.1 iscntrl1.2 isspace1.3 isdigit1.4 isxdigit1.5 islower1.6 isupper1.7 isalpha1.8 isalnum1.9 ispunct1.10 isgraph1.11 isprint 在编程的过程中,我们会经常处理字符,为了方便操作,C语言标准库中提供了一系…...

Android对工程中的String中文字符的整理

​ 本文主要介绍使用python快速整理工程中的中文字符,为app国际化提供便利。 1. 查找Android工程中的所有中文字符串(find_chinese.py) import os import re import argparsedef is_comment_line(line, file_ext):"""判断一行是否是注释:param lin…...

菜鸟之路Day30一一MySQL之DMLDQL

菜鸟之路Day30一一MySQL之DML&DQL 作者:blue 时间:2025.5.8 文章目录 菜鸟之路Day30一一MySQL之DML&DQL一.DML0.概述1.插入语句(insert)2.更新语句(update)3.删除语句(delete&#xf…...

集团云解决方案:集团企业IT基础架构的降本增效利器

在当今数字化飞速发展的时代,集团企业面临着诸多挑战,尤其是IT基础架构的管理和运营成本居高不下,效率却难以提升。别担心,集团云解决方案的出现为集团企业带来了全新的曙光,真正实现了降本增效! 一、集团…...

基 LabVIEW 的多轴电机控制系统

在工业自动化蓬勃发展的当下,多轴伺服电机控制系统的重要性与日俱增,广泛应用于众多领域。下面围绕基于 LabVIEW 开发的多轴伺服电机控制系统展开,详细阐述其应用情况。 一、应用领域与场景 在 3D 打印领域,该系统精确操控打印头…...

SD06_前后端分离项目部署流程(采用Nginx)

本文档详细描述了如何在Ubuntu 20.04服务器上从零开始部署Tlias前后端分离系统。Tlias系统由Spring Boot后端(tlias-web-management)和Vue前端(vue-tlias-management)组成。 目录 环境准备安装MySQL数据库部署后端项目部署前端项…...

【kubernetes】通过Sealos 命令行工具一键部署k8s集群

一、前言 1、sealos安装k8s集群官网:K8s > Quick-start > Deploy-kubernetes | Sealos Docs 2、本文安装的k8s版本为v1.28.9 3、以下是一些基本的安装要求: 每个集群节点应该有不同的主机名。主机名不要带下划线。所有节点的时间需要同步。需要…...

《Go小技巧易错点100例》第三十二篇

本期分享: 1.sync.Map的原理和使用方式 2.实现有序的Map sync.Map的原理和使用方式 sync.Map的底层结构是通过读写分离和无锁读设计实现高并发安全: 1)双存储结构: 包含原子化的 read(只读缓存,无锁快…...

怎么判断是不是公网IP?如何查看自己本地路由器是内网ip还是公网?

在网络世界中,IP 地址如同每台设备的 “门牌号”,起着至关重要的标识作用。而 IP 地址又分为公网 IP 和私网 IP,准确判断一个 IP 属于哪一类,对于网络管理、网络应用开发以及理解网络架构等都有着重要意义。接下来,我们…...

【上位机——MFC】单文档和多文档视图架构

单文档视图架构 特点&#xff1a;只能管理一个文档(只有一个文档类对象) #include <afxwin.h> #include "resource.h"//文档类 class CMyDoc :public CDocument {DECLARE_DYNCREATE(CMyDoc) //支持动态创建机制 }; IMPLEMENT_DYNCREATE(CMyDoc,CDocument) //…...

需求分析阶段测试工程师主要做哪些事情

在软件测试需求分析阶段&#xff0c;主要围绕确定测试范围、明确测试目标、细化测试内容等方面开展工作&#xff0c;为后续测试计划的制定、测试用例的设计以及测试执行提供清晰、准确的依据。以下是该阶段具体要做的事情&#xff1a; 1. 需求收集与整理 收集需求文档&#x…...

Web 实时通信技术:WebSocket 与 Server-Sent Events (SSE) 深入解析

一、WebSocket&#xff1a; &#xff08;一&#xff09;WebSocket 是什么&#xff1f; WebSocket 是一种网络通信协议&#xff0c;它提供了一种在单个 TCP 连接上进行全双工通信的方式。与传统的 HTTP 请求 - 响应模型不同&#xff0c;WebSocket 允许服务器和客户端在连接建立…...

项目模拟实现消息队列第二天

消息应答的模式 1.自动应答: 消费者把这个消息取走了&#xff0c;就算是应答了&#xff08;相当于没有应答) 2.手动应答: basicAck方法属于手动应答(消费者需要主动调用这个api进行应答) 小结 1.需要实现生产者,broker server&#xff0c;消费者这三个部分的 2.针对生产者和消费…...

5.Redission

5.1 前文锁问题 基于 setnx 实现的分布式锁存在下面的问题&#xff1a; 重入问题&#xff1a;重入问题是指 获得锁的线程可以再次进入到相同的锁的代码块中&#xff0c;可重入锁的意义在于防止死锁&#xff0c;比如 HashTable 这样的代码中&#xff0c;他的方法都是使用 sync…...

c#数据结构 线性表篇 非常用线性集合总结

本人能力有限,使用了一些Ai的结论,如有不足还请斧正 目录 1.HashSet <> Dictionary 2.SortedSet <>提供升序方法的List 3.ArrayList<>List 4.BitArray <> Bit[] array 5.StringCollection <>List 6.StringDictionary<>Dictionary 1…...

dify 部署后docker 配置文件修改

1&#xff1a;修改 复制 ./dify/docker/.env.example ./dify/docker/.env 添加一下内容 # 启用自定义模型 CUSTOM_MODEL_ENABLEDtrue# 将OLLAMA_API_BASE_URL 改为宿主机的物理ip OLLAMA_API_BASE_URLhttp://192.168.72.8:11434# vllm 的 OPENAI的兼容 API 地址 CUSTOM_MODE…...

数据结构——排序(万字解说)初阶数据结构完

目录 1.排序 2.实现常见的排序算法 2.1 直接插入排序 ​编辑 2.2 希尔排序 2.3 直接选择排序 2.4 堆排序 2.5 冒泡排序 2.6 快速排序 2.6.1 递归版本 2.6.1.1 hoare版本 2.6.1.2 挖坑法 2.6.1.3 lomuto前后指针 2.6.1.4 时间复杂度 2.6.2 非递归版本 2.7 归并排序…...

SQLite3介绍与常用语句汇总

SQLite3简介 SQLite3是一款轻量级的、基于文件的开源关系型数据库引擎&#xff0c;由 D. Richard Hipp 于 2000 年首次发布。它遵循 SQL 标准&#xff0c;但与传统的数据库系统不同&#xff0c;SQLite 并不运行在独立的服务器进程中&#xff0c;而是作为一个嵌入式数据库引擎直…...