从RPC调用失败到架构原理:一次搞懂远程服务调用的核心机制
1. 从一次“诡异”的远程调用失败说起那天下午我正忙着调试一个微服务间的接口突然在日志里看到一行熟悉的错误rpc failed; curl 56 recv failure: connection was reset。这行报错相信不少搞后端开发的朋友都见过尤其是在处理分布式系统或者调用外部服务时。表面上看它就是一个网络连接被重置的错误但背后牵扯出的是整个远程服务调用RPC链条上可能出现的无数个“坑”——网络闪断、服务端超时、序列化异常、负载均衡策略失效甚至是防火墙的“神秘”干预。那一刻我意识到仅仅会调用一个RPC框架的API是远远不够的。如果不清楚数据是如何从你的机器出发穿越网络抵达另一台机器上的某个函数并带着结果返回的那么排查这类问题就如同盲人摸象。这就是我们今天要彻底搞懂RPC架构的原因。它绝不仅仅是“像调用本地函数一样调用远程函数”这么一句轻飘飘的口号。RPC是构建分布式系统、微服务架构的基石从你熟悉的Spring Cloud、Dubbo到新兴的gRPC、Thrift再到云原生时代的服务网格Service Mesh其核心思想都源于RPC。理解RPC就等于拿到了理解现代后端架构的一把钥匙。无论你是刚入门的新手还是遇到过类似“RPC服务器不可用”困扰的开发者接下来的十分钟我们将一起剥开RPC的层层外壳从一次简单的本地函数调用出发看看它究竟是如何“进化”成一次跨越网络的复杂协作的。我们会绕过那些晦涩的理论用最直白的语言和类比把客户端存根、序列化、网络传输、服务端分发这些核心环节一一拆解清楚。2. RPC的本质为什么不能直接发个HTTP请求很多人第一个问题就是RPC和HTTP API比如RESTful有什么区别我直接用HTTP调用远程服务不行吗这是一个非常好的起点。答案是当然可以但RPC为你做得更多、更专。想象一下你要在公司内部协调两个团队服务完成一个任务。用HTTP API就像是你每次都需要写一封格式严谨的邮件定义好URL、方法、请求头、JSON体发给另一个团队的公共邮箱HTTP端点然后等待回信。你需要手动处理邮件的封装、投递和解析。而RPC则像是为这两个团队专门建立了直通电话和一套暗号。你这边拿起电话调用本地接口用你们内部的暗语编程语言原生数据类型说“老张帮我查一下用户123的订单”。电话系统RPC框架自动把你的话翻译成对方能理解的信号序列化通过电话线网络传输送过去对方的电话机RPC框架再翻译回暗语叫醒老张调用实际服务方法最后把结果通过同样的路径送回来。对你而言你只是打了个电话完全不用关心信号是怎么传输、怎么翻译的。所以RPC的核心目标是透明化和高效化调用透明让开发者使用远程服务时感受上如同使用本地服务。这是通过“客户端存根Stub”实现的它伪装成本地对象拦截你的调用。通信高效针对服务间通信的场景进行深度优化。相比于通用的HTTP/JSONRPC通常采用更紧凑的二进制协议如Protocol Buffers, Thrift Binary序列化/反序列化速度极快网络开销小。像faster rcnn模型架构详解里涉及的模型服务化部署对推理延迟要求极高二进制RPC协议几乎是必选。服务治理集成一个成熟的RPC框架如Dubbo, gRPC天然集成了服务发现、负载均衡、熔断降级、监控追踪等治理能力。当你调用一个服务名时框架自动帮你找到健康的服务实例解决“RPC服务器不可用”问题并决定调用哪一个。这在微服务架构中是不可或缺的。而那个curl 56的错误如果发生在裸的HTTP调用中你可能需要自己处理重试、超时、连接池管理。但在RPC框架里这些往往是内置的、可配置的策略。理解架构后你就知道该去调整哪个参数比如超时时间、重试策略来应对这类网络不稳定问题。3. 拆解一次RPC调用的完整生命周期让我们跟随一次具体的RPC调用看看它从诞生到结束都经历了什么。这个过程就像一份快递从寄件人到收件人手中的旅程。3.1 第一步客户端存根——你的本地“代言人”当你在代码中写下userService.getUser(123)时userService并不是远在另一个进程里的真实对象而是一个由RPC框架生成的“替身”我们称之为客户端存根Client Stub或代理Proxy。它的核心工作有三件方法映射它知道getUser这个方法对应远程服务的哪个具体接口和方法ID。参数序列化编码它将参数123一个整数以及方法信息按照预定的协议比如前面提到的二进制协议转换成一串可以在网络上传输的字节流。这个过程叫序列化Serialization或编码Marshalling。不同的架构有不同的选择例如在arm架构和x86架构的机器间通信要特别注意字节序Endianness问题好的序列化库如Protobuf会帮你透明处理。发起网络请求它将序列化后的字节流通过网络客户端比如基于Netty的异步IO组件发送到网络。这里它会处理连接管理、超时设置等。你看到的connection was reset错误往往就发生在这个阶段。注意存根的存在是实现“透明调用”的魔法所在。对于业务开发者他感知到的就是一个普通的接口调用复杂性被框架隐藏了。3.2 第二步网络传输——数据的高速公路序列化后的字节流需要通过网络传输到服务器。这里涉及几个关键概念协议RPC框架会在TCP/IP等传输层协议之上定义自己的应用层协议。这个协议规定了数据包的格式哪里是消息头包含消息ID、序列化类型、数据长度等元信息哪里是消息体序列化后的参数。gRPC基于HTTP/2利用了其多路复用、头部压缩等特性而Dubbo有自定义的Dubbo协议更加精简。通信模型最常见的是请求-响应模型。也有异步、流式Streaming模型例如gRPC就支持单向流和双向流非常适合传输文件、实时消息等场景这在agent架构或实时数据推送中很有用。连接管理是每次调用都新建连接短连接还是维护一个长连接池长连接可以避免频繁的TCP三次握手开销是高性能RPC的标配。连接池的管理策略如最大连接数、空闲超时直接影响系统的并发能力和资源消耗。那个curl 56 recv failure错误通常意味着TCP连接在数据传输过程中被异常关闭了。可能的原因包括服务端进程崩溃、网络中间设备如防火墙、负载均衡器超时断开、或者服务端处理超时主动断开了连接。3.3 第三步服务端骨架——请求的调度中心数据包历经千辛万苦到达服务器后首先由服务端骨架Server Skeleton接手。它是服务端的“前台接待”。它的职责包括网络监听持续监听特定端口如Dubbo的20880接受新的连接和请求数据。协议解析按照约定的协议从接收到的字节流中正确解析出消息头和信息体。它需要处理TCP的粘包、拆包问题确保一个完整的请求数据被重组出来。请求分发根据解析出的方法信息如接口名、方法名找到本机注册的对应服务实现类例如UserServiceImpl。参数反序列化将消息体中的字节流反序列化成Java或其他语言的对象作为参数准备好。3.4 第四步服务调用与响应返回骨架准备好参数后就会通过反射或动态代理机制调用真正的服务实现UserServiceImpl.getUser()。服务方法执行业务逻辑比如查询数据库然后返回结果对象。接下来是一个逆向的过程骨架将返回结果对象序列化成字节流。按照协议构造响应数据包包含消息头、序列化后的结果体。通过刚才的TCP连接将响应数据包发送回客户端。客户端存根接收到响应包后进行协议解析和结果反序列化最终将得到的对象返回给你的业务代码。至此一次完整的RPC调用结束。对你而言只是一次本地方法调用并获得了返回值对框架而言则完成了一次跨越进程和网络的复杂协作。4. RPC架构中的核心组件与技术选型理解了生命周期我们再来看看支撑这套流程的“基础设施”。一个工业级的RPC框架远不止是调用和返回它包含一个丰富的生态系统。4.1 注册中心服务的“电话簿”在微服务架构中服务实例可能动态扩缩容IP地址会变。客户端如何知道该连接哪台机器这就需要服务注册中心。工作流程服务提供者启动时向注册中心如Nacos, ZooKeeper, Consul注册自己的服务名和网络地址IP:Port。消费者启动时从注册中心订阅所需服务获取可用的提供者列表。健康检查注册中心会定期检查提供者的健康状态心跳机制将不可用的实例从列表中剔除。这是解决“RPC服务器不可用”问题的核心机制。当某个实例网络断开或进程僵死注册中心能及时发现客户端下次获取列表时就会避开它。负载均衡客户端存根在拿到多个提供者地址后需要选择一个来调用。常见的策略有随机、轮询、最少活跃调用、一致性哈希等。一致性哈希在缓存类服务中很有用可以保证相同参数的请求总是落到同一台机器上。4.2 序列化协议数据的“翻译官”序列化协议的选择对性能和跨语言能力至关重要。协议特点适用场景例子JSON / XML文本格式人类可读通用性强但冗余大序列化速度慢。对可读性要求高、跨语言但性能不敏感的场景。RESTful API常用。二进制协议紧凑序列化/反序列化速度快节省带宽。高性能、高并发的内部服务调用。Hessian,Thrift Binary,Protobuf,Kyro。跨语言IDL通过接口定义语言IDL定义数据结构和服务然后生成多语言代码。多语言技术栈的微服务体系。Protobuf(gRPC),Apache Thrift,Avro。实操心得在python fastapi 三层架构中如果内部服务间调用频繁强烈建议使用gRPC基于Protobuf替代HTTP/JSON。我曾在一个项目中做此替换接口平均响应时间降低了约60%网络带宽占用减少了70%以上。Protobuf的.proto文件也成为了服务接口的权威契约便于前后端或不同服务协同。4.3 网络通信框架IO的“引擎”高并发下的网络IO处理能力是RPC性能的瓶颈之一。现代RPC框架普遍采用异步非阻塞IO模型。BIO (Blocking IO)早期模型一个连接一个线程资源消耗大不适合高并发。NIO (Non-blocking IO)Java NIO使用Selector多路复用单线程可处理多个连接。Netty是Java领域最卓越的NIO框架几乎所有主流RPC框架Dubbo, gRPC-Java, Spark等的网络层都基于Netty构建。它帮你完美处理了TCP粘包/拆包、编解码链、心跳保持等复杂问题。AIO (Asynchronous IO)理论上更先进但在Linux上底层仍用epoll模拟且编程模型复杂实际应用不如NIO广泛。为什么是Netty它提供了高度封装的API让你能像搭积木一样ChannelPipeline中添加各种ChannelHandler构建网络应用将业务逻辑与网络通信解耦。你只需要关心“收到一个完整请求对象后做什么”以及“如何将一个响应对象发送出去”。4.4 治理功能系统的“免疫系统”这是RPC框架区别于简单HTTP客户端的关键价值。熔断与降级当某个服务失败率过高时熔断器会“跳闸”短时间内直接拒绝请求防止级联故障和资源耗尽。降级则是在服务不可用时提供一种备选方案如返回缓存数据、默认值。限流控制服务被调用的频率防止突发流量打垮服务。常见算法有计数器、滑动窗口、令牌桶、漏桶。监控与链路追踪记录每次调用的耗时、成功率并生成分布式链路追踪图如集成Zipkin, SkyWalking可以快速定位性能瓶颈和故障点。当出现rpc failed时链路追踪能告诉你是在调用链的哪个环节失败的。配置管理动态调整超时时间、重试次数、负载均衡策略等参数无需重启服务。5. 从零到一如何设计一个极简RPC框架纸上得来终觉浅。要真正吃透RPC最好的方法之一就是理解其最小实现。下面我们勾勒一个极简RPC框架的核心步骤这能帮你把前面所有知识点串联起来。1. 定义通信协议IDL与协议头首先你需要一个约定。写一个简单的接口定义文件或者直接约定通信协议由“消息头”和“消息体”组成。消息头固定长度比如16字节。包含魔数用于快速识别无效包、版本、消息类型请求/响应、序列化方式、消息ID用于匹配请求和响应、数据长度。消息体变长内容是序列化后的请求/响应对象。2. 实现序列化与反序列化选择一个简单的序列化方式开始比如JSON。编写工具类负责将Java对象与字节数组互转。后期可以扩展支持Hessian、Protobuf等。3. 实现客户端代理存根使用Java动态代理InvocationHandler技术。当调用接口方法时InvocationHandler的invoke方法会被触发。在这里你需要将方法名、参数类型、参数值序列化成消息体。生成一个唯一消息ID构造完整的协议数据包。通过网络客户端如Socket将数据包发送到服务器并同步等待响应。收到响应后根据消息ID匹配反序列化得到结果对象并返回。4. 实现服务端骨架与分发服务端启动一个ServerSocket监听端口。对于每个接入的连接读取数据按照协议解析出消息头根据数据长度读取完整的消息体。根据消息头中的接口名、方法名通过反射找到本地已注册的服务实例和方法对象。反序列化消息体得到参数列表利用反射调用真实方法。将方法返回值序列化构造响应数据包写回给客户端。5. 引入注册中心进阶将硬编码的服务器地址替换为从注册中心动态获取。启动时向注册中心注册消费时从注册中心订阅并缓存地址列表并监听变化。完成这五步一个最核心的RPC流程就跑通了。虽然它离生产级还很远缺乏连接池、异步、负载均衡、治理等但你已经亲手实现了RPC最本质的魔法让远程调用看起来像本地调用。6. 生产环境中的常见“坑”与应对策略理论很美好但现实很骨感。下面分享几个我在实际运维中遇到的典型问题和解决思路这可能是文档里不会细说的部分。问题一connection was reset类网络错误频发可能原因服务端处理超时服务端业务逻辑耗时过长超过了TCP Keep-Alive或中间件如Nginx、负载均衡器的连接超时设置导致它们主动断开了连接。网络不稳定物理网络抖动、防火墙策略中断长连接。客户端连接池配置不当连接池中的连接空闲时间过长被服务端或中间设备清理但客户端不知情继续使用这个“僵死”的连接。排查与解决检查超时配置这是首要怀疑点。检查RPC客户端、服务端、以及中间所有网络设备负载均衡器、API网关的超时设置。原则是下游超时 上游超时。例如服务处理逻辑超时应设为3秒RPC框架客户端超时可设为5秒网关超时可设为8秒。这样能确保错误能在最接近问题发生的地方被捕获和记录。优化服务端性能分析服务端慢查询、慢逻辑优化数据库索引、算法或引入缓存。配置合理的重试机制对于因网络抖动导致的失败配置幂等重试。但切记对于连接超时Timeout可以快速重试对于连接重置Connection Reset可能需要更谨慎的退避重试。检查连接池配置合理的心跳间隔让连接保持活跃。设置连接最大空闲时间定期回收重建。问题二服务消费者报“No provider available”可能原因提供者根本没注册到注册中心。提供者注册了但健康检查失败被注册中心摘除。消费者订阅的服务名与提供者注册的服务名不匹配大小写、分组、版本号。网络分区消费者无法连接到注册中心或获取的列表是旧的。排查与解决登录注册中心管理界面直接查看服务是否存在实例列表是否为空。这是最直接的证据。检查提供者日志查看启动日志确认是否注册成功。检查是否有频繁的Full GC导致心跳线程暂停从而被判定为不健康。核对服务三元组确认接口名、分组group、版本version在提供者和消费者端完全一致。这是最容易忽略的配置错误。引入本地文件缓存在消费者端将从注册中心拉取的服务列表缓存在本地文件中。当注册中心完全不可用时可以降级使用本地缓存保证核心服务可用。问题三序列化/反序列化失败可能原因接口不兼容服务端接口修改如增加、删除、修改字段后客户端未更新存根Stub或.proto文件导致双方对数据结构的理解不一致。跨语言类型映射问题例如Java的long类型在某些语言中可能溢出。使用默认序列化如Java原生序列化效率低且对类版本极其敏感。规避策略契约先行严格版本管理使用Protobuf等IDL将.proto文件作为服务契约进行版本控制。任何修改都必须升级版本号并保证向后兼容性如只添加optional字段不删除或修改必填字段。优先选择跨语言、向前/向后兼容的序列化协议如Protobuf、Thrift。进行兼容性测试在发布新版本服务前用旧版客户端和新版客户端分别进行测试。7. 现代架构演进从RPC框架到服务网格RPC技术本身也在演进。在云原生和微服务架构普及的今天服务网格Service Mesh正在将RPC中的治理能力流量管理、安全、可观测性从业务代码中彻底解耦下沉到基础设施层。以Istio为例它通过在每个服务Pod中注入一个Sidecar代理如Envoy来接管所有进出该服务的网络流量。这时你的服务间通信依然是RPC如HTTP/gRPC但重试、超时、熔断、负载均衡、监控等策略不再由RPC客户端库如Dubbo Client配置而是通过Istio的VirtualService、DestinationRule等CRD资源进行声明式配置。这种变化带来了什么语言无关性无论你的服务是用Java、Go还是Python写的治理功能由统一的Sidecar提供。运维与开发解耦网络策略的变更可以由运维人员通过YAML文件完成无需开发者改代码、重新发布应用。更细粒度和动态的控制可以基于请求头、路径等条件进行非常精细的流量路由和金丝雀发布。但这并不意味着传统RPC框架过时了。服务网格更侧重于通用网络流量的治理而RPC框架在协议优化、序列化性能、特定语言生态集成上仍有其优势。许多时候它们是互补和共存的。例如在ai agent架构演进中Agent间的复杂协作调用可能更需要高性能的二进制RPC而整个Agent集群的流量治理则可以交给服务网格。理解RPC的底层架构能让你更好地理解服务网格在做什么——它本质上是在网络层实现了一个更强大、更透明的“超级RPC治理中心”。无论技术如何演进数据如何封装、传输、路由和治理这些核心思想是相通的。

相关新闻

Hold Rein代码图插件:让AI理解项目上下文,实现智能编码协作

Hold Rein代码图插件:让AI理解项目上下文,实现智能编码协作

1. 项目概述:当AI“看”懂你的代码库最近在折腾一个老项目,接手时看着满屏的目录和文件,感觉头都大了。想用AI助手帮忙重构或者加个新功能,但每次把单个文件丢给它,得到的回答要么是“管中窥豹”,要么就是“…

2026/10/11 18:14:42 阅读更多 →
NB-IoT低功耗模式详解:PSM、eDRX、DRX配置与实战避坑指南

NB-IoT低功耗模式详解:PSM、eDRX、DRX配置与实战避坑指南

1. 项目概述:从“省电”到“在线”的平衡艺术最近在做一个基于NB-IoT的远程环境监测项目,客户对电池寿命的要求近乎苛刻,希望一个内置电池的设备能稳定工作3年以上。这让我不得不再次深入研究NB-IoT模组的几种核心工作模式:PSM、D…

2026/10/6 14:17:25 阅读更多 →
YOLO手写数字符号识别实战:从数据构建到Web部署全流程

YOLO手写数字符号识别实战:从数据构建到Web部署全流程

1. 从零到一:为什么选择YOLO做手写数字符号识别?如果你正在寻找一个能快速上手、效果又不错的计算机视觉项目,手写数字和符号识别绝对是个经典选择。从银行支票的自动处理,到教育领域的试卷批改,再到物流单据的信息提取…

2026/10/14 14:39:44 阅读更多 →

最新新闻

SpringBoot集成Activiti 7.x工作流引擎实战指南

SpringBoot集成Activiti 7.x工作流引擎实战指南

1. 项目背景与核心价值 工作流引擎是现代企业级应用开发中不可或缺的基础设施。Activiti作为目前Java生态中最成熟的开源工作流引擎之一,其7.x版本在云原生适配和API简化方面做出了重大改进。而SpringBoot的自动化配置特性,恰好能解决传统工作流系统集成…

2026/10/15 11:27:08 阅读更多 →
DeepSeek-R1推理模型与通用模型选型及提示语策略

DeepSeek-R1推理模型与通用模型选型及提示语策略

简介:《DeepSeek从入门到精通》是清华大学新闻与传播学院元宇宙文化实验室编写的PDF学习资料,面向希望系统掌握DeepSeek的AI初学者、深度用户与开发者,帮助读者理解DeepSeek-R1开源推理模型的定位,并学会在实际工作中高效调用其能…

2026/10/15 11:27:08 阅读更多 →
SQLite FTS5 context-mode:上下文感知全文检索实战指南

SQLite FTS5 context-mode:上下文感知全文检索实战指南

1. 什么是 context-mode:一个被误读却极具实操价值的 SQLite 高级查询模式 “context-mode”这个词最近在开发者社区里频繁出现,但翻遍 SQLite 官方文档、FTS5 手册甚至 Stack Overflow 的高赞回答,你都找不到一个叫 “context-mode” 的正式…

2026/10/15 11:27:08 阅读更多 →
HoRain云--OpenClaw云助手:AI配置全攻略与TaoToken统一Key接入实践

HoRain云--OpenClaw云助手:AI配置全攻略与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/15 11:27:08 阅读更多 →
【A11】0 号用户叙述笔记

【A11】0 号用户叙述笔记

0 号用户(admin / admin11)是平台的"创世种子"——它存在,但不统治。它的使命是让系统能够不需要它。一、基本定义项目值用户 ID0用户名admin密码admin11(代码硬编码初始值,数据库可改)本质双层身…

2026/10/15 11:27:08 阅读更多 →
轻量级OpenPose:CPU实时2D多人姿态估计的算法解析与工程落地

轻量级OpenPose:CPU实时2D多人姿态估计的算法解析与工程落地

如果你手头正好有一个“在CPU上把2D多人姿态估计跑起来”的需求,那么看到“Real-time 2D Multi-Person Pose Estimation on CPU:Lightweight OpenPose”这个标题时,大概率会有一种“终于等到”的感觉。姿态估计这两年很火,但绝大多…

2026/10/15 11:26:07 阅读更多 →

日新闻

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/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

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

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

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

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

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

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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 阅读更多 →