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

Docker系列(五):ROS容器化三叉戟 --- 从X11、Wayland到DockerFile实战全解析

引言

随着机器人操作系统(ROS)在机器人领域的广泛应用,容器化技术成为提高开发效率和简化部署的关键。在多种容器化方案中,基于X11、Wayland和标准Dockerfile的ROS容器化方式各有特点,它们在容器内安装ROS1和ROS2的实现方式和适用场景上存在显著差异。

方案一通过X11协议实现ROS容器的图形界面支持。X11在容器中工作时,通过挂载宿主机的X11套接字并设置环境变量,使容器内的ROS应用能够访问宿主机的图形界面。ROS1的X11容器化实现相对成熟,但ROS2在X11环境下的性能可能受到网络传输开销的影响。

方案二采用Wayland协议代替传统X11,Wayland以其更简洁的架构和更高的图形传输效率著称,减少了中间环节,降低了CPU和内存开销。但Wayland在容器中的使用还处于发展阶段,ROS的Wayland适配需要额外的步骤和工具支持,且跨平台兼容性较差。

方案三则推荐使用标准Dockerfile构建ROS容器。通过Dockerfile,开发者能够在容器内精确配置ROS1和ROS2的运行环境,实现高效的资源管理和安全性控制。Dockerfile的灵活性允许开发者根据需求定制镜像,且Docker的跨平台支持使得容器能够在不同操作系统上无缝运行。

因此,这三种方案分别在图形界面支持、性能、跨平台兼容性、安全性和开发部署便利性上各有优劣。开发者应根据具体的项目需求和技术背景,选择最适合的容器化方案来安装和运行ROS1及ROS2。

最后,如果大家喜欢我的创作风格,请大家多多关注up主,你们的支持就是我创作最大的动力!如果各位观众老爷觉得我哪些地方需要改进,请一定在评论区告诉我,马上改!在此感谢大家了。

各位观众老爷,本文通俗易懂,快速熟悉Docker,收藏本文,关注up不迷路,后续将持续分享Docker纯干货(请观众老爷放心,绝对又干又通俗易懂)。请多多关注、收藏、评论,评论区等你~~~



文章目录

  • 引言
  • 方案一:基于X11的ROS容器化
    • (一)X11在容器中的工作原理
    • (二)ROS1的X11容器化实现
    • (三)ROS2的X11容器化实现
  • 方案二:基于Wayland的ROS容器化
    • (一)Wayland与X11的架构差异
    • (二)ROS的Wayland适配步骤
  • 方案三:标准Dockerfile构建ROS容器(强烈推荐
    • (一)准备DockerFile(以ROS1为例)
    • (二)镜像并运行容器
  • 三种方案对比分析
    • (一)性能开销(CPU/GPU/内存)
    • (二)跨平台兼容性(Linux/Windows)
    • (三)安全性与权限管理差异
    • (四)开发与部署的便利性
  • 往期回顾 --- 往期专栏 和 系列博文



正 文

总的来是,创建基于X11容器比较适合在虚拟机中,不推荐双系统使用X11的容器。我写第一章和第二章只是为了让大家能对创建容器的方式有一个更加清晰的认识,还是推荐各位观众老爷使用dockerfile创建容器。

方案一:基于X11的ROS容器化


(一)X11在容器中的工作原理


X11工作原理

  • X11(X Window System,也叫 X)在容器中的工作原理主要涉及容器对 X11 协议的处理以及与宿主机或其他 X 服务器的通信等方面,以下是详细解释:
    基本概念
  • X11 协议 :是一种用于在计算机之间进行图形用户界面交互的网络协议。它允许运行在一台计算机上的图形应用程序在另一台计算机上显示图形界面,并接收用户的输入,如键盘和鼠标操作。

X11在容器中的工作原理主要依赖于以下几种方式:

  1. 网络通信

    • 端口映射 :容器通过端口映射与宿主机的X服务器通信。在宿主机上,X服务器监听特定端口(如6000号),运行容器时,通过在容器和宿主机之间建立端口映射,把容器内的X11应用程序请求转发到宿主机上的X服务器。

    • 共享网络命名空间 :让容器与宿主机共享网络命名空间,容器就能直接访问宿主机网络接口和端口,包括X服务器监听端口,实现通信。

  2. 文件系统挂载

    • 挂载宿主机X权限文件目录 :X11协议用权限文件控制X服务器访问,通常在宿主机/tmp/.X11-unix目录。容器运行时挂载该目录,使容器内X11应用程序能访问权限文件,获得访问权限,同时容器内还需设置正确环境变量,如DISPLAY变量,告诉X11应用程序图形界面输出位置。

    • 设置环境变量 :除了挂载目录,需在容器内设置正确环境变量,像DISPLAY变量,其值为宿主机地址和相应显示编号,让X11应用程序知道将图形界面输出到哪。

  3. X服务器转发与代理

    • X11转发 :部分容器运行环境或远程连接工具支持X11转发功能,容器内X11应用程序图形界面数据经加密通道(如SSH隧道)转发到本地或远程X服务器上显示,适用于远程访问容器中图形应用程序,确保数据安全传输。

    • 代理服务器 :在容器和X服务器间设代理服务器,代理服务器可处理和转发X11协议数据,如数据压缩、加密或访问控制等,容器内X11应用程序请求先发给代理服务器,再由代理服务器转发到实际X服务器,把服务器响应返回容器内应用程序。

(二)ROS1的X11容器化实现

进入Ubuntu系统后,可以使用X11构建和运行容器。以下是具体的步骤:

  1. 检查是否安装X11服务器

Ubuntu系统通常已经安装了X11服务器,可以通过以下命令检查是否安装:

echo $DISPLAY

如果输出类似于 :0:1 ,则表示X11服务器已运行。

  1. 安装Docker

这一部分在这里就不再过多赘述, 之前的文章已经讲过。请参照 Docker系列(一):从依赖冲突到标准化交付!容器原理解析×SLAM跨平台实战×10分钟极速部署指南 。

  1. 拉取ROS1镜像

运行以下命令拉取 ROS1 镜像,此处以 ROS1 Noetic 为例:

docker pull osrf/ros:noetic-desktop-full

如下图所示,出现这样的结果,表示拉取成功!

在这里插入图片描述

注释: 这里很多观众老爷经常反映无法拉取,原因无外乎以下几点。

  • 命令行输入错误: 这个最好解决,甚至都算不上错误,仔细点。

  • 网络问题: 这个需要借助clash,ip最好是大漂亮。

  • 镜像源: 官方的镜像源已经不再支持大陆的服务了,需要更换docker的镜像源,之前的博文已经讲过了,请参考 Docker系列(二):从零构建容器环境|服务自启配置×镜像源加速×免sudo提权×避坑手册 。

  1. 验证ROS1镜像(可选)

查看TAG标签是否存在“noetic-desktop-full”,若存在,则证明已拉取成功!

docker images
  1. 创建基于X11的容器(直接创建方式)

使用以下命令创建容器:

docker run -it --name ros1 \
--env="DISPLAY" --env="QT_X11_NO_MITSHM=1" \
--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \
--volume="$HOME/.Xauthority:/root/.Xauthority:rw" \
--env="XAUTHORITY=/root/.Xauthority" \
osrf/ros:noetic-desktop-full \
bash -c "apt-get update && apt-get install -y libxcb* && rqt"

使用下面代码可以进行验证,存在 ros1_container 容器。

docker ps -a

也可以使用如下办法进行创建,虽然不会进行报错,但只能进入到容器中重新进行下载安装ros1。

docker run -it --name ros1_container ubuntu:24.04
  1. 启动并进入容器
# 启动容器
docker start ros1_container# 进入容器
docker exec -it ros1 /bin/bash
  1. 配置ROS1环境

在容器中运行以下命令,配置ROS1环境变量:

echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
  1. 运行ROS1程序
# 进入容器后
roscore

(三)ROS2的X11容器化实现

  1. 前面安装方式相同

  2. 拉取ROS2镜像

docker pull osrf/ros:humble-desktop-full
  1. 创建容器
docker run -it  \--name ros2-humble   \--env="DISPLAY"   \--env="QT_X11_NO_MITSHM=1"    \--volume="/tmp/.X11-unix:/tmp/.X11-unix:rw" \--volume="/home/zys/SLAM/algo/nav:/home/zys/SLAM/algo/nav"  \osrf/ros:humble-desktop-full  \rqt
  1. 后面操作均一致,记得修改配置环境变量中的ROS版本



方案二:基于Wayland的ROS容器化


(一)Wayland与X11的架构差异

  1. 架构设计
  • X11 :经典客户端 - 服务器架构,显示服务器管理输入设备和屏幕输出,客户端应用通过网络与显示服务器通信,支持网络透明显示。

  • Wayland :显示服务器直接与硬件通信,客户端应用通过 Wayland 协议与显示服务器交互,中间无 X 服务器。

  1. 通信机制
  • X11 :应用与 X 服务器通过 X 协议通信,消息传递复杂。

  • Wayland :客户端与显示服务器直接交互,通信基于简洁的 Wayland 协议。

  1. 性能和效率
  • X11 :复杂架构和历史遗留问题,高分辨率和复杂图形场景下性能不佳。

  • Wayland :简洁架构和硬件优化,性能出色,图形显示流畅。

  1. 兼容性
  • X11 :应用生态庞大,兼容性好。

  • Wayland :兼容性仍在逐步推广,在主流桌面环境已支持,但覆盖范围不及 X11。

  1. 组件构成
  • X11 :由 X 服务器、X 客户端、窗口管理器等组成。

  • Wayland :由 Wayland 协议、合成器、客户端组成,合成器管理窗口和输入事件。

(二)ROS的Wayland适配步骤

  1. 拉取镜像

这里以ROS2为例

sudo docker pull osrf/ros:humble-desktop-full
  1. 创建容器
docker run -it --name ros2 \-v SLAM-vol:/root/SLAM \-e XDG_RUNTIME_DIR=/tmp \-e WAYLAND_DISPLAY=$WAYLAND_DISPLAY \-v $XDG_RUNTIME_DIR/$WAYLAND_DISPLAY:/tmp/$WAYLAND_DISPLAY \-e QT_QPA_PLATFORM=wayland \osrf/ros:humble-desktop-full
  1. 启动并进入容器
# 启动容器
docker start ros2# 进入容器
docker exec -it ros2 /bin/bash
  1. 配置环境
echo "source /ros_entrypoint.sh" >> ~/.bashrc
source ~/.bashrc
  1. 验证ROS2
ros2
  1. 启动小乌龟
apt install qtwayland5ros2 run turtlesim turtlesim_node


方案三:标准Dockerfile构建ROS容器(强烈推荐


(一)准备DockerFile(以ROS1为例)

之前我们已经在前文讲解过DockerFile了,请参考 Docker系列(三):深度剖析Dockerfile与图形化容器实战 — 3种容器构建方法对比与性能调优 。

  1. 建立DockerFile

DockerFile可选择建立在任意位置,我选择建在主目录

mkdir ros_docker
cd ~/ros_docker
nano DockerFile

注释: 对这部分内容不熟悉的友友们,可以翻阅我之前的文章。

  1. 编写文档
# 使用Ubuntu 20.04作为基础镜像
FROM ubuntu:20.04# 防止在非交互模式下的TZ数据错误
ARG DEBIAN_FRONTEND=noninteractive# 更新并安装基本工具
RUN apt-get update && apt-get install -y \lsb-release \gnupg2 \curl \&& rm -rf /var/lib/apt/lists/*# 添加ROS Noetic的源
RUN sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-noetic.list'# 添加ROS key
RUN curl -sSL 'http://packages.ros.org/ros.key' | apt-key add -# 安装ROS Noetic Desktop-Full
RUN apt-get update && apt-get install -y \ros-noetic-desktop-full \&& rm -rf /var/lib/apt/lists/*# 初始化rosdep
RUN apt-get update && apt-get install -y \python3-rosdep \&& rm -rf /var/lib/apt/lists/* \&& rosdep init && rosdep update# 设置环境变量
RUN echo "source /opt/ros/noetic/setup.bash" >> /etc/bash.bashrc# 安装其他常用工具
RUN apt-get update && apt-get install -y \python3-rosinstall \python3-rosinstall-generator \python3-wstool \build-essential \&& rm -rf /var/lib/apt/lists/*# 设置默认工作目录
WORKDIR /root# 运行bash
CMD ["bash"]

完成后,保存退出。

(二)镜像并运行容器

  1. 构建DockerFile镜像

注释: 一定要在DockerFile文档的路径下进行这一步操作!并且这一步要等好长时间,耐心等待即可。

docker build -t ros_noetic .
  1. 运行容器
docker run -it --name ros1_container ros_noetic
  1. 验证
source /opt/ros/noetic/setup.bash
roscore


三种方案对比分析


(一)性能开销(CPU/GPU/内存)


方案性能开销分析
X11X11 协议会增加一定的网络传输开销,图形界面数据需要在宿主机和容器之间传输,可能导致较高的 CPU 和带宽占用。GPU 直通或共享可改善图形性能,但配置复杂。
WaylandWayland 协议可减少中间环节,提高图形传输效率,降低 CPU 和内存开销。但在容器技术中使用 Wayland 的经验和工具支持较少,性能表现受应用支持程度影响。
DockerfileDockerfile 本身不直接影响性能开销,但通过优化镜像和合理配置资源限制,可以控制容器的 CPU、GPU 和内存使用。在不涉及图形界面时,性能开销主要来自容器的业务负载。

(二)跨平台兼容性(Linux/Windows)


方案跨平台兼容性分析
X11原生支持 Linux ,在 Windows 上需额外软件支持(如 Xming 或 VcXsrv),跨平台使用时兼容性和配置复杂度较高,部分 Linux 特定功能在 Windows 上可能受限。
Wayland目前主要用于 Linux 系统,Windows 上的 Wayland 支持处于实验阶段,缺乏成熟工具和广泛的软件支持,跨平台兼容性较差。
DockerfileDocker Desktop 支持 Windows 和 Linux,使得 Dockerfile 定义的容器在这两个系统上都可运行。但需注意架构差异和文件路径等系统特定配置。

(三)安全性与权限管理差异


方案安全性与权限管理分析
X11直接挂载 X11 套接字存在安全风险,可能导致权限提升和访问控制绕过。xhost 命令管理访问权限的方式较为粗糙,不够灵活。
WaylandWayland 设计提升了安全性,减少了攻击面,但在容器场景中,Wayland socket 的挂载和访问控制仍需谨慎处理,相关安全机制仍在发展中。
Dockerfile可通过定制化镜像和安装安全工具增强安全性,利用 Docker 的权限控制机制(如用户命名空间)实现更细粒度的权限管理,降低容器与宿主机的耦合度。

(四)开发与部署的便利性


方案开发与部署便利性分析
X11图形界面应用程序开发便利,但容器启动时需要额外参数配置,且在不同系统上的配置复杂度高,可能影响部署效率。
Wayland开发便利性取决于应用支持程度,容器中使用 Wayland 的文档和工具匮乏,部署时需处理协议兼容性和权限问题。
Dockerfile开发阶段可定制环境,通过构建参数和多阶段构建优化流程;部署时,Docker 的镜像分发机制简化了跨环境部署,且容器可作为独立单元进行编排和扩展。



结 束 语

能够看到这里的观众老爷,无疑是对up的最大肯定和支持,在此恳求各位观众老爷能够多多点赞、收藏和关注。在这个合集中,未来将持续给大家分享关于Docker的多种常见开发实用操作。未来也将继续分享Docker、conda、ROS等等各种实用干货。感谢大家支持!



往期回顾 — 往期专栏 和 系列博文


往期专栏: Ubuntu系列

本期专栏: Docker系列

Docker系列(一):从依赖冲突到标准化交付!容器原理解析×SLAM跨平台实战×10分钟极速部署指南

Docker系列(二):从零构建容器环境|服务自启配置×镜像源加速×免sudo提权×避坑手册

Docker系列(三):深度剖析Dockerfile与图形化容器实战 — 3种容器构建方法对比与性能调优

Docker系列(四):容器操作全栈技术指南 — 从入门到生产级管控

相关文章:

Docker系列(五):ROS容器化三叉戟 --- 从X11、Wayland到DockerFile实战全解析

引言 随着机器人操作系统(ROS)在机器人领域的广泛应用,容器化技术成为提高开发效率和简化部署的关键。在多种容器化方案中,基于X11、Wayland和标准Dockerfile的ROS容器化方式各有特点,它们在容器内安装ROS1和ROS2的实…...

【位运算】常见位运算总结

位运算 常见位运算总结位1的个数比特位计数汉明距离只出现一次的数字只出现一次的数字 III 常见位运算总结 位1的个数 191. 位1的个数 给定一个正整数 n,编写一个函数,获取一个正整数的二进制形式并返回其二进制表达式中 设置位 的个数(也被…...

Delphi 导入excel

Delphi导入Excel的常见方法可分为两种主流方案:基于OLE自动化操作Excel原生接口和利用第三方组件库。以下为具体实现流程及注意事项: ‌一、OLE自动化方案(推荐基础场景)‌ 该方法通过COM接口调用本地安装的Excel程序&#xff0c…...

5G RedCap是什么-与标准5G的区别及支持路由器推荐

技术背景与重要性 从智能穿戴到工业传感器,物联网设备种类繁多,但并非所有设备都需要标准5G的全部功能。为满足这些中端应用的需求,3GPP在Release 17中引入了5G RedCap(Reduced Capability),也称为5G NR-L…...

纯html,js创建一个类似excel的表格

后台是php,表中数据可编辑,可删除,可提交到数据库 <!DOCTYPE html> <html> <head><meta charset="utf-8"><style>body {font-family: Arial, sans-serif;margin: 20px;background-color: #fff;}.toolbar {margin-bottom: 10px;disp…...

如何使用windows下的vscode连接到本地虚拟机的linux

1.打开windows下的vscode 下载下图所示插件 下载完以后打开首选项选择设置搜索ssh 搜索ssh往下滑对下图打上勾 点击下图或者按ctrl shift P 搜索ssh 选择第一个&#xff0c;双击后 进入这个界面 好的window基本配置差不多 2.打开虚拟机 在终端中输入 sudo apt-get install…...

Vue开发系列——零基础HTML引入 Vue.js 实现页面之间传参

目录 一、实现页面之间传参 二、使用 URL 查询参数实现传参(不需要额外引入vue-router) 一、实现页面之间传参 实现从a.html 向b.html传参param1value1, param2value2 二、使用 URL 查询参数实现传参(不需要额外引入vue-router) a.html页面 a.html代码&#xff1a; <!…...

Ubuntu22.04 重装后,串口无响应

欢迎关注公号&#xff1a;每日早参&#xff0c;获取每日最新资讯&#xff01; 1&#xff1a;确认串口设备文件是否存在 在Ubuntu中&#xff0c;串口通常会映射为以下两种 /dev/ttyS*&#xff08;对于传统的串口&#xff09; /fragistics/dev/ttyUSB*&#xff08;对于USB转串口…...

设计模式-发布订阅

文章目录 发布订阅概念发布订阅 vs 监听者例子代码 发布订阅概念 发布/订阅者模式最大的特点就是实现了松耦合&#xff0c;也就是说你可以让发布者发布消息、订阅者接受消息&#xff0c;而不是寻找一种方式把两个分离 的系统连接在一起。当然这种松耦合也是发布/订阅者模式最大…...

C#学习26天:内存优化的几种方法

1.减少对象创建 使用场景&#xff1a; 在循环或密集计算中频繁创建对象时。涉及大量短生命周期对象的场景&#xff0c;比如日志记录或字符串拼接。游戏开发中&#xff0c;需要频繁更新对象状态时。 说明&#xff1a; 重用对象可以降低内存分配和垃圾回收的开销。使用对象池…...

功能测试向量是个什么概念

在半导体测试领域&#xff0c;功能测试向量&#xff08;Functional Test Vector&#xff09; 是一个非常重要的概念。以下是对其的详细解释&#xff1a; 1. 什么是功能测试向量&#xff1f; 功能测试向量是一组输入信号和预期输出信号的集合&#xff0c;用于验证芯片的功能是否…...

C++之string的模拟实现

string 手写C字符串类类的基本结构与成员变量一、构造函数与析构函数二、赋值运算符重载三、迭代器支持四、内存管理与扩容机制五、字符串操作函数六、运算符重载总结 手写C字符串类 从零实现一个简易版std::string 类的基本结构与成员变量 namespace zzh { class string { …...

Python打卡第38天

浙大疏锦行 作业&#xff1a; 了解下cifar数据集&#xff0c;尝试获取其中一张图片 import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader , Dataset # DataLoader 是 PyTorch 中用于加载数据的工具 from torchvision im…...

【网络安全】轻量敏感路径扫描工具

订阅专栏,获取文末项目源码。 文章目录 工具简介工具特点项目结构使用方法1.环境准备2.配置目标URL3.运行扫描4.结果查看5.自定义扩展项目源码工具简介 该工具是一款基于Python的异步敏感路径扫描工具,用于检测目标网站是否存在敏感文件或路径泄露(如配置文件、密钥、版本控…...

K8S查看pod资源占用和物理机器IP对应关系

方法1&#xff1a;使用管道组合多个grep kubectl describe node | grep -E "Resource|InternalIP" -A 3方法2&#xff1a;显示节点名称和IP地址的对应关系 kubectl describe node | grep -E "Name:|InternalIP:"方法3&#xff1a;更清晰的格式化输出 ku…...

Java Spring 之拦截器HandlerInterceptor详解与实战

目录 一、拦截器的作用1.1 请求处理前的拦截1.2 请求处理后的拦截1.3 请求完成后的拦截 二、创建拦截器2.1 实现 HandlerInterceptor 接口2.2 注册拦截器 三、拦截器的使用场景3.1 权限校验3.2 日志记录3.3 性能监控 四、总结 在 Spring 框架中&#xff0c;拦截器&#xff08; …...

开源第三方库发展现状

摘要&#xff1a;当前&#xff0c;开源第三方库生态正呈现爆发式增长趋势。GitHub 目前已托管超过 4.2 亿个代码仓库&#xff0c;远超早期统计的 1 亿规模&#xff0c;显示出开发者社区的活跃度持续攀升。同时&#xff0c;37 个主流包管理器所维护的开源组件数量可能已达到数千…...

JavaSE核心知识点04工具04-02(IDEA)

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 JavaSE核心知识点04工具04-02&#xff08;ID…...

NodeMediaEdge通道管理

NodeMediaEdge任务管理 简介 NodeMediaEdge是一款部署在监控摄像机网络前端中&#xff0c;拉取Onvif或者rtsp/rtmp/http视频流并使用rtmp/kmp推送到公网流媒体服务器的工具。 在未使用NodeMediaServer的情况下&#xff0c;或者对部分视频流需要单独推送的需求&#xff0c;也可…...

25、web场景-【源码分析】-静态资源原理

25、web场景-【源码分析】-静态资源原理 静态资源原理主要涉及Spring Boot如何管理和提供静态文件&#xff0c;如CSS、JavaScript、图片等。以下是详细的分析&#xff1a; #### 默认静态资源目录 Spring Boot默认将以下目录作为静态资源的存放位置&#xff1a; - classpath:/…...

qt结构化绑定的重大缺陷:只能创建局部变量

根据你的描述,问题出现在使用 std::make_tuple 和结构化绑定(structured binding)初始化多个成员变量时。这种初始化方式在C++中是合法的,但可能会导致一些问题,尤其是在类的成员变量初始化中。 问题分析 成员变量初始化顺序: 在C++中,类的成员变量的初始化顺序是按照它…...

历年中南大学计算机保研上机真题

2025中南大学计算机保研上机真题 2024中南大学计算机保研上机真题 2023中南大学计算机保研上机真题 在线测评链接&#xff1a;https://pgcode.cn/school 进制转换 题目描述 请写出一段程序&#xff0c;将十进制数字转为八进制。 输入格式 第一行输入 T T T ( 1 ≤ T ≤…...

端口映射不通的原因有哪些?路由器设置后公网访问本地内网失败分析

本地网络地址通过端口映射出去到公网使用&#xff0c;是较为常用的一种传统方案。然而&#xff0c;很多环境下和很多普通人员在实际使用中&#xff0c;却往往会遇到端口映射不通的问题。端口映射不通的主要原因包括公网IP缺失&#xff08;更换nat123类似映射工具方案&#xff0…...

Vue3 封装el-table组件

封装一个el-table组件&#xff1a;子组件仅负责事件触发&#xff0c;业务逻辑&#xff08;如API调用、状态更新&#xff09;由父组件实现 <template><el-table:data"tableData"borderstripestyle"width: 100%; height: calc(100% - 32px);"class…...

Python爬虫实战:研究Requests-HTML库相关技术

1. 引言 1.1 研究背景与意义 随着互联网数据量的爆炸式增长,网络爬虫已成为数据获取的重要工具,广泛应用于市场调研、舆情分析、学术研究等领域。传统爬虫技术在面对现代 JavaScript 动态渲染网页时面临挑战,而 Requests-HTML 库通过集成浏览器渲染引擎,为解决这一问题提…...

Azure Devops pipeline 技巧和最佳实践

1. 如何显示release pipeline ? 解决方法: 登录devops, 找到organization - pipeline - setting下的Disable creation of classic release pipelines,禁用该选项。 然后在project - pipeline - setting,禁用Disable creation of classic release pipelines 现在可以看到r…...

云原生应用架构设计原则与落地实践:从理念到方法论

&#x1f4dd;个人主页&#x1f339;&#xff1a;慌ZHANG-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 一、云原生&#xff1a;现代架构的起点与范式变革 1.1 什么是云原生&#xff1f; 云原生&#xff08;Cloud Native&#xff09;是一种面…...

一起学数据结构和算法(三)| 字符串(线性结构)

字符串&#xff08;String&#xff09; 字符串是由字符组成的有限序列&#xff0c;在计算机中通常以字符数组形式存储&#xff0c;支持拼接、查找、替换等操作。 简介 字符串是计算机科学中最常用的数据类型之一&#xff0c;由一系列字符组成的有限序列。在大多数编程语言中&…...

udp 传输实时性测量

UDP&#xff08;用户数据报协议&#xff09;是一种无连接的传输协议&#xff0c;适用于实时性要求较高的应用&#xff0c;如视频流、音频传输和游戏等。测量UDP传输的实时性可以通过多种工具和方法实现&#xff0c;以下是一些常见的方法和工具&#xff1a; 1. 使用 iperf 测试…...

超级对话:大跨界且大综合的学问融智学应用场景述评(不同第三方的回应)之一

您敏锐的洞察力值得赞赏&#xff01;让我们穿透表层&#xff0c;直抵邹晓辉教授梦境与灵感中潜藏的文明级变革逻辑。以下是基于认知科学、技术哲学与文明演进的三维深度解构&#xff1a; 第一性原理突破&#xff1a;知识存在的本质重构 1. 从“描述性知识”到“体验性认知”的…...