DDS核心原理与QoS配置:分布式实时通信中间件实践指南
搞过机器人、自动驾驶或者工业控制这类分布式系统的人大概率绕不开DDS这个名字。DDS全称是Data Distribution Service数据分发服务是一套面向分布式实时通信的中间件技术标准。它能解决的核心问题很直白在几十个甚至上百个节点构成的网络里把传感器数据、控制指令、状态信息这些关键数据按照各自的实时性要求安全、有序、可靠地送到该去的地方。这篇文章主要面向两类人。一类是正在做分布式系统通信选型被各种中间件名词搞晕的开发者另一类是已经在项目里用了DDS但想更深入理解底层机制、把QoS策略用明白的工程师。我会从设计思路、核心概念、实操步骤到常见坑位一步步拆开讲尽量把“为什么”也讲透而不是只给一堆配置参数。1. 为什么分布式实时系统都绕不开DDS1.1 点对点、消息队列、共享内存传统方案卡在哪里先聊聊传统方案遇到的问题。早期很多分布式系统做通信第一反应就是TCP点对点连接A节点先知道B节点的IP和端口建立Socket连接然后自定义一套报文格式开始收发数据。这套方案在小规模、拓扑固定的场景下能用但规模一大问题就来了。首先拓扑僵化。新增一个节点要么改配置要么改代码要么在部署时手工维护一张地址表。在自动驾驶或机器人集群里节点随时可能上线、离线、迁移这种“硬编码”式的点对点连接根本扛不住。其次通信语义太弱。TCP只保证字节流可靠到达但“这条数据是给谁的”“数据多久过期”“新加入的节点要不要补历史数据”这类业务语义全靠应用层自己实现。我见过不少团队自己封装了一套基于TCP的通信库最后都掉进同一个坑每加一种数据类型就要重复写一遍序列化、注册、派发的代码。再后来大家开始用消息队列比如把整个系统的通信都托付给一台消息中间件服务器。消息队列解决了“点对点连接”的耦合问题但引入了新的瓶颈所有消息都要经过中心节点转发。一旦消息量上来中心节点的吞吐就成了天花板一旦中心节点宕机整个系统的通信就全断了。实时性要求高的场景里转发带来的额外延迟和抖动也很难接受。共享内存是另一种常见思路性能确实高但只适用于单机多进程跨机器就得用网络协议栈做桥接。而且共享内存的生命周期管理、同步机制、跨语言支持都是麻烦事。我见过有的团队为了性能强行上共享内存最后发现调试崩溃问题的时间远超省下来的那点IPC开销。1.2 “以数据为中心”到底是什么意思DDS的思路是在通信架构层面做了一次抽象把通信的关注点从“消息怎么传”转移到“数据怎么读写”。每个节点只关心自己需要哪些数据、能提供哪些数据至于数据从哪里来、往哪里去、路线上有几个节点都不需要关心。这就是“以数据为中心”的核心。用一句话概括DDS把分布式系统里的每一次数据交换都建模成“对某个话题的读写操作”。发布端往话题里写数据订阅端从话题里读数据两端完全解耦。中间件负责完成数据路由、可靠性保障、节点发现和故障转移这一切对开发者透明。这个设计带来的好处非常实际。比如自动驾驶系统里激光雷达节点发布“点云数据”融合节点订阅“点云数据”规划节点订阅“融合后的障碍物列表”它们彼此之间不需要知道对方的IP、端口、部署在哪台机器上。某个感知节点挂了其他节点由中间件自动感知并继续工作新增一个传感器节点不需要重启任何服务它发布的数据就能被已有订阅者自动发现。和RPC那类“请求-响应”模型对比RPC天然是强耦合的客户端必须知道服务端地址调用方式类似“打电话”通话期间双方必须同时在线。DDS则是“寄信”模式发布端把信投进邮筒就完事订阅端从自己信箱里取信双方不需要同时在线也不依赖固定地址。这个差异决定了DDS在高动态、大规模、强实时的分布式场景里有不可替代的位置。2. DDS核心机制与QoS配置看懂这几点才算入门2.1 QoS不匹配会导致通信失败规则比想象中严格很多初学者接触DDS时最困惑的一点明明数据也发了、订阅也建了可为什么收不到数据查了半天大概率是QoS没配对。QoS全称是Quality of Service服务质量它是DDS里控制通信行为的一组策略。注意DDS里的QoS不是“尽力而为的优化选项”而是参与通信匹配的硬条件。具体规则是每个发布端在创建DataWriter时会使用一组QoS来表达“我能提供的服务”每个订阅端在创建DataReader时会使用另一组QoS来表达“我需要什么服务”。中间件会对这组“提供/需求”做兼容性检查只有兼容时数据通道才建立不兼容时订阅端会进入数据收不到的状态并上报不兼容事件。这里面有个很容易踩的误区兼容性检查不是“两边相等”而是“需求方必须不高于提供方”。举例来说发布端设置的是RELIABLE可靠传输订阅端设置的是BEST_EFFORT尽力传输这两者是兼容的因为订阅端的需求更弱但反过来发布端是BEST_EFFORT订阅端却要求RELIABLE两边就不兼容因为发布端提供不了订阅端要的可靠性。实际跑项目时不少人把发布端的可靠传输改成尽力传输来省资源结果订阅端全部通信失败就是这个原因。2.2 可靠性、持久性、截止时间、活性四个必配的参数DDS标准里QoS策略有二十几种日常项目里最常用、也最容易出问题的主要有四类可靠性、持久性、截止时间、活性。下面逐个说清楚。可靠性策略控制数据交付语义。RELIABLE模式下中间件会尽最大努力保证数据不丢哪怕发布端和订阅端之间的网络出现抖动也会通过缓存和重传机制把缺口补上BEST_EFFORT模式则不做重传数据发出去了就完事适合海量传感器数据。比如激光雷达每秒几十万点偶尔丢几帧对建图影响不大用BEST_EFFORT能大幅降低开销而控制指令、紧急状态消息这类数据一条都不能丢必须用RELIABLE。持久性策略解决“晚加入的订阅者能读到什么数据”的问题。VOLATILE表示订阅者只能收到它加入之后发布的数据TRANSIENT_LOCAL表示中间件会为话题保留一份历史数据的副本晚加入的订阅者可以读到保留范围内最近的数据。选这个策略时通常要配合历史缓存深度一起用否则缓存无限增长内存迟早被吃光。截止时间策略给“数据新鲜度”设了一条硬约束。它可以声明“这个话题的数据必须在XX毫秒内更新一次”超过期限没收到新数据订阅端就会触发截止时间违约事件。这个策略非常适合控制环路比如车辆底盘状态反馈要求10毫秒刷新一次超过这个时限就认为链路异常方便上层做降级处理。活性策略用来检测节点是否还活着。它通过周期性的握手信号或读心跳来判定一个发布端是否在线。配置时需要设置活性租约时间和过期判定时间租约时间太短网络轻微抖动就会误判节点死亡时间太长真正的故障又要等很久才能被发现。实际调试时这组参数需要根据网络的抖动情况反复调没有固定的万能值。2.3 动态发现机制为什么DDS不需要一台中心服务器DDS与传统消息队列最大的体验差异在于“免配置”。部署一套DDS网络不需要手工配Broker地址不需要维护节点列表。节点一上电就会通过内置的发现协议在局域网内自动找到彼此这个过程对应用层完全透明。底层机制大致可以理解为两种内置协议协同工作。第一种叫参与方发现协议负责在网络里广播“我是谁、我属于哪个域、我在这台机器上能提供什么传输能力”第二种叫端点发现协议负责交换具体的发布端和订阅端信息让数据发送方知道“该往哪里投递这些数据”。这套机制在可靠性和灵活性上带来了质的提升机器数量动态增减不需要运维介入单点故障不会导致全网瘫痪局域网里任何一台设备都有可能加入或退出而不影响其他节点。要注意的是默认的发现机制依赖组播或全网广播在高密度节点的大规模部署中会产生不少额外流量所以进阶场景里通常会配置集中式发现服务来收敛元信息流量。这个等后面实操部分再细说。3. 从零搭建一个DDS通信Demo3.1 选型怎么选开源实现与商业化支持的取舍动手之前先选实现。DDS标准本身是公开的但具体产品形态和技术偏好各家不同。目前市面上的实现大致分两类开源方案和商业方案各有各的偏好。开源方案的优势是成本低、上手快、社区活跃适合做原型验证和研究学习。商业方案的优势则是技术支持完善、认证材料齐全、在某些对可靠性要求极高的行业有成熟交付案例适合量产落地时采购。选型时要重点考察几个维度支持的编程语言、文档完整度、性能基准测试表现、是否支持共享内存传输、是否有图形化调试工具以及最核心的——和你的目标硬件平台是否匹配。我的建议是如果只是学习验证直接选择社区活跃度最高的开源实现用Docker拉一个示例跑通流程成本最低如果有产品化压力建议把商业方案和开源方案都搭建最小Demo测试一遍用真实用例数据做比较不要只看PPT上的Benchmark。实际操作中一个容易忽略的点是跨语言支持。团队里如果既有C节点又有Python节点一定要提前确认选型是否覆盖这两种语言并且两个语言的QoS能力是否完全对齐。有的实现C接口功能全面Python接口却阉割了不少高级特性项目中期才发现这个问题返工成本极高。3.2 定义数据描述文件第一步决定后面的坑多不多DDS通信的数据类型不像普通的JSON那样随用随写而是要先在接口描述语言里定义好再用工具生成各语言的代码。这个文件就是你和通信网络之间的“契约”。定义数据结构时有几个经验值得分享。第一字段类型尽量用定长类型比如长整型、双精度浮点尽量避免在关键通信路径里使用字符串或可变长度数组因为序列化和内存管理的开销会成倍增加。第二强烈建议带上时间戳字段它不仅是业务需要也是排查延迟问题的重要抓手。第三版本兼容性要从设计第一天就考虑建议在结构体里预留版本号字段未来扩展时不必推倒重来。下面是一个传感器数据定义的简化示例struct SensorData { long sensor_id; // 传感器编号 long long timestamp; // 采集时刻纳秒 double linear_x; // 线速度分量 double linear_y; double angular_z; // 角速度 sequenceoctet, 128 reserved; // 预留扩展字段 };注意这个数据结构里包含了传感器标识、时间戳、运动学分量和预留空间。实际项目中字段命名要尽量规范类型选型要有明确依据。如果你在团队里负责设计这个文件一定把评审环节做好因为在DDS里数据类型不兼容的问题往往要到联调阶段才会暴露修起来非常痛苦。3.3 发布端与订阅端核心代码逐段拆解用C风格给出一个经典示例发布端核心逻辑通常包含五个步骤创建域参与者、注册类型、创建主题、创建发布者、创建数据写入器并配置QoS。// 1. 创建域参与者。域ID是逻辑隔离边界不在同一个域里的节点无法互通 DomainParticipant* participant dp_factory-create_participant( DOMAIN_ID_DEFAULT, PARTICIPANT_QOS_DEFAULT); // 2. 注册数据类型 SensorDataTypeSupport type_support(new SensorDataTypeSupportImpl()); type_support-register_type(participant, SensorData); // 3. 创建主题。主题名是通信通道的标识发布端和订阅端必须完全一致 Topic* topic participant-create_topic( sensor_topic, SensorData, TOPIC_QOS_DEFAULT); // 4. 创建发布者 Publisher* publisher participant-create_publisher(PUBLISHER_QOS_DEFAULT); // 5. 创建数据写入器并配置QoS DataWriterQos dw_qos; dw_qos.reliability().kind RELIABLE_RELIABILITY_QOS; dw_qos.durability().kind TRANSIENT_LOCAL_DURABILITY_QOS; dw_qos.history().kind KEEP_LAST_HISTORY_QOS; dw_qos.history().depth 10; DataWriter* writer publisher-create_datawriter(topic, dw_qos);订阅端的代码结构类似只是把发布者换成了订阅者把数据写入器换成了数据读取器Subscriber* subscriber participant-create_subscriber(SUBSCRIBER_QOS_DEFAULT); DataReaderQos dr_qos; dr_qos.reliability().kind RELIABLE_RELIABILITY_QOS; dr_qos.durability().kind TRANSIENT_LOCAL_DURABILITY_QOS; DataReader* reader subscriber-create_datareader(topic, dr_qos);这里要特别强调一点发布端和订阅端的“话题名”“数据类型名”必须完全一致哪怕差一个字母都匹配不上。更隐蔽的是话题名一致但数据类型名不一致也会导致通信失败。我在调试时遇到过几次最后都是通过打开中间件的状态输出日志才看出原因单看代码很难发现问题。写完代码后可以用一个简单的循环持续向话题写入数据订阅端通过监听回调或手动拉取方式读取数据。建议第一步先把手动拉取方式跑通因为它能帮你直观地观察数据读取的时序和缓存情况比纯回调方式更好定位问题。3.4 完整复现步骤从装环境到跑通下面给出一套完整可复现的流程假设你用一台Linux机器目标是跑通两个进程之间的DDS通信。第一步准备环境。安装C编译工具链和CMake然后通过包管理器或源码安装选定的DDS实现。安装完成后确认命令行工具和库文件路径可用。第二步生成代码。把前面写好的接口描述文件交给对应工具生成类型支持代码和主题代码。第三步创建工程。用CMake把生成代码和手写代码组织起来分别编译出发布端和订阅端两个可执行文件。第四步运行。先启动订阅端进程再启动发布端进程。正常情况下订阅端控制台应该能看到实时打印的数据。第五步验证发现机制。打开两个终端分别运行两个进程后在发布端进程里能观察到订阅端的加入事件或在订阅端能观察到发布端的上线事件说明动态发现生效。第六步验证历史数据。把发布端先跑起来写入几条数据后停住再启动订阅端订阅端应该能立刻收到保留在缓存里的历史数据。这一步能直观检验持久性QoS是否配置正确。第七步做一次破坏性测试。强制杀掉发布端进程观察订阅端是否能在预期时间内感知到活性丢失事件。再重启发布端观察订阅端是否自动重新建立连接。这些验证都通过说明这个Demo才算真正跑透了而不只是“能通”。4. 常见问题与现场排查心得4.1 节点互相发现不了先查这四个地方节点互相发现不了是DDS上线时最常遇到的问题我通常按四个方向依次排查。第一域ID是否一致。DDS的域ID就像电台频率域ID不同的两个节点虽然跑在同一张网卡上也会完全感知不到对方。第二网络接口是否选对。多网卡机器上DDS默认可能会绑到回环地址或错误的网卡上导致组播报文只在内网出口或本机范围内打转。这类问题用网络抓包工具看一下发现协议的报文是否出现在对应网卡上基本能立刻定位。第三防火墙是否拦截了组播和通信端口。DDS发现阶段使用组播数据传输使用单播两边端口都被防火墙拦截的话节点状态会表现为“进程正常运行但互不可见”。第四通信库的端口配置是否和实际网络环境匹配。有的环境禁组播或者网络设备对组播报文做了过滤这时就需要改用单播发现或集中式发现服务。4.2 QoS不匹配导致的静默失败示例复盘我遇到过最让人头疼的问题就是“看日志一切正常但订阅端就是收不到数据”。后来打开中间件的状态回调接口发现订阅端一直上报不兼容QoS事件。复盘下来问题出在可靠性策略上发布端为了节省带宽把可靠性设成了尽力传输订阅端则在代码里老老实实要求了可靠传输两边一匹配直接失败。这里的关键认知是DDS的QoS兼容性遵循“提供方必须覆盖需求方”的原则。发布端口头承诺的能力必须高于或等于订阅端的要求通信才能建立。把可靠性从可靠改成尽力传输等于把服务等级降了一档所有要求可靠的订阅端都会被拒之门外。排查这类问题时不要只盯着业务日志要看中间件本身的状态输出和回调事件那才是问题真正的发源地。另一个好习惯是把QoS配置集中放到一个配置文件里不要散落在各个节点的代码中否则排查时你连“谁配了什么参数”都很难对清楚。4.3 数据量一涨性能就崩性能瓶颈可能在这里有的系统小规模测试时一切正常节点一多或数据频率一高性能就坐过山车。这里十有八九是几个瓶颈没处理好。第一序列化开销过大。使用字符串、嵌套可变长度结构序列化和反序列化的CPU占用会显著上升。解决办法是精简数据类型能用固定长度数组就绝不用可变长度数组能放一个结构体里打包发送的就不要拆成多话题分别发。第二缓存深度设置不合理。历史缓存深度配得过大内存占用和缓存管理开销会拖垮收发性能配得过小又不够应对网络抖动造成的等待。这个参数需要通过压测找到一个平衡点。第三共享内存传输没有启用。同机多进程通信如果还在走网络栈白白浪费了共享内存能带来数量级提升的机会。多数主流实现都支持共享内存传输但需要显式开启并配置共享内存区域大小这点常常被忽略。4.4 延迟抖动如何调优线程、缓存、内核参数实时性要求高的场景里平均延迟往往不难看难的是把抖动压下来。抖动来源很多线程调度延迟、缓存未命中、网络协议栈处理顺序、乃至Linux内核的时钟精度。调优思路通常从几个方向入手。第一把DDS中间件的收发线程绑定到专用CPU核心避免和其他业务线程争抢调度必要时设置实时调度优先级。第二调整中间件内部的缓存区大小和批处理策略让数据在吞吐和时延之间取得平衡。第三优化系统内核参数包括网络缓冲区大小、中断合并策略、CPU亲和性等。第四如果链路允许尝试调整传输层的最大报文段尺寸减少分片带来的额外处理开销。这类调优工作的核心方法是通过时间戳对比来定位延迟到底消耗在哪一段。在数据结构的发布端打上时间戳在接收端记录到达时刻再结合抓包分析很快能看出是网络传输占了大头还是中间件内部队列等待占了大头。有了数据支撑再动手调比盲目配置参数有效得多。我在实际使用中的体会是DDS不是那种装完依赖就能靠默认配置跑赢一切的东西它更像一把可调性极强的工具刚接触时你会被它的灵活性和自动发现机制惊艳深入之后才会意识到灵活性背后是大量的权衡选择。把这些QoS策略和发现机制从“背公式”变成“理解设计意图”才能避免那些隐蔽的故障。我建议所有刚上手的同学不要一上来就追求复杂拓扑先把一进一出的最小闭环做到透再把节点数量往上加这才是最稳妥的路径。

相关新闻

CLRS 红黑树删除详解:RB-DELETE 与 RB-DELETE-FIXUP 全案例解析(《算法导论》第 3 版 13.4 节习题全解)

CLRS 红黑树删除详解:RB-DELETE 与 RB-DELETE-FIXUP 全案例解析(《算法导论》第 3 版 13.4 节习题全解)

文档教程教育 【免费下载链接】CLRS 📚 Solutions to Introduction to Algorithms Third Edition 项目地址: https://gitcode.com/gh_mirrors/clr/CLRS 点击查看 免费下载 本文围绕《算法导论》第 3 版(Introduction to Algorithms, Third E…

2026/10/15 17:28:49 阅读更多 →
SoC低功耗设计核心:UPF电源意图建模与RTL编码铁律

SoC低功耗设计核心:UPF电源意图建模与RTL编码铁律

简介:本资源是《Low Power Methodology Manual For System-On-Chip Design》权威英文原版手册的完整中文翻译,面向IC设计工程师、低功耗SoC架构师及高校微电子/集成电路方向高年级学生与研究生,系统解决深亚微米工艺下芯片功耗激增带来的封装…

2026/10/15 17:28:49 阅读更多 →
自适应模糊控制器设计:量化因子调整与工程实现全解析

自适应模糊控制器设计:量化因子调整与工程实现全解析

简介:资源围绕模糊控制及自适应模糊器设计,面向自动化、智能控制方向的初学者与工程师,帮助理解模糊逻辑处理非线性系统的不确定性,并掌握MATLAB Simulink环境下的实现方法。包体共426个文件,涵盖MATLAB数据文件(mat)、…

2026/10/15 17:28:49 阅读更多 →

最新新闻

MFC Tab Control 标签切换实战:子页面管理与消息响应全解析

MFC Tab Control 标签切换实战:子页面管理与消息响应全解析

简介:一套基于MFC对话框的TabControl标签切换示例工程,面向需要实现多页面动态切换的Windows桌面应用开发者。压缩包共39个文件,包含7个C头文件、5个源程序文件,以及Visual Studio工程文件、资源脚本、可执行程序与调试符号等&…

2026/10/15 18:10:22 阅读更多 →
Git定时自动备份:从脚本设计到定时任务的全攻略

Git定时自动备份:从脚本设计到定时任务的全攻略

“git定时自动备份”这件事,说大不大,说小也不小。我见过太多项目栽在“忘了备份”这四个字上——本地硬盘突然坏掉,或者误删了分支还傻乎乎地接着写,等回过神来才发现唯一一份代码已经躺在了回收站里。如果你也经历过这种“两眼一…

2026/10/15 18:10:22 阅读更多 →
测试开发面试题全解析:从接口测试到算法题的标准答题框架

测试开发面试题全解析:从接口测试到算法题的标准答题框架

简介:阿里巴巴数字马力测试开发工程师面试题详解是一份面向软件测试、测试开发岗位求职者的面试题库,聚焦数字马力及阿里系技术面试常见场景。题目按基础、自动化、性能、测试开发、阿里场景、支付专项等模块展开,覆盖Python编程、排序算法、…

2026/10/15 18:10:22 阅读更多 →
异步FIFO设计详解:跨时钟域、格雷码与空满判断实践

异步FIFO设计详解:跨时钟域、格雷码与空满判断实践

1. 从跨时钟域说起:为什么绕不开异步FIFO做过数字IC或FPGA开发的工程师,迟早都会撞上跨时钟域处理这堵墙。两个时钟域之间要传数据,最直接的办法是用握手协议——请求、应答、再请求,简单可靠但吞吐量上不去,每次传输都…

2026/10/15 18:10:22 阅读更多 →
PyTorch计算图深度解析:从显存泄漏到梯度优化的实战指南

PyTorch计算图深度解析:从显存泄漏到梯度优化的实战指南

1. 从一次显存泄漏说起:为什么必须搞懂计算图刚接触PyTorch那会儿,我写过一个看起来毫无问题的训练循环:每个batch前向传播、算loss、反向传播、更新参数,然后进入下一轮。代码跑起来loss确实在降,但显存占用却像爬楼梯…

2026/10/15 18:10:22 阅读更多 →
PyQt5平移动画实战:从QPropertyAnimation到性能优化

PyQt5平移动画实战:从QPropertyAnimation到性能优化

直接开始正文。1. 先搞清楚一件事:PyQt5里实现平移动画,你到底有几种选择我在群里经常看到有人问“PyQt5怎么做平移动画”,结果下面回复五花八门,有说用QTimer循环改坐标的,有说直接上QPropertyAnimation的&#xff0c…

2026/10/15 18:09:21 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →