CubeFS blobstore RPC2 配置完全指南:smux 传输、Server 与 Client 参数详解
存储分布式文件系统对象存储云原生【免费下载链接】cubefscloud-native distributed storage项目地址https://gitcode.com/gh_mirrors/cu/cubefs点击查看免费下载导读本文围绕 CubeFS 纠删码子系统blobstore中的 RPC2 通信框架逐字段拆解其传输层smux 多路复用、服务端Server与客户端Client的全部配置项包括类型定义、JSON 字段名、默认值、取值范围与底层实现语义。读完本文你将能够独立编写一份可运行的 RPC2 服务端/客户端配置文件理解read_timeout、max_session_per_address、lb负载均衡等关键参数在源码中的实际作用并学会通过 blobstore 官方示例 与 shardnode 真实配置 对照验证自己的配置。提示RPC2 配置项自 CubeFS v3.6.0 起提供默认配置支持未显式配置的部分参数会自动使用源码内置默认值。RPC2 是什么blobstore 的多路复用 RPC 框架RPC2 是 CubeFS blobstore 模块自带的 RPC 通信框架位于 blobstore/common/rpc2 目录。与基于 HTTP 的rpc框架不同RPC2 以smux 多路复用传输层为基础一条底层 TCP 连接上可以建立多个 Session每个 Session 又可以打开多个 Stream多个请求/响应并行地在同一个连接上收发从而显著降低长连接数量与握手开销。从 框架文档 可见RPC2 采用 Frame帧协议承载消息支持单 Frame 与多 Frame 两种形态每条消息由Header Length4 字节小端长度、Header内含 Body Length 与 Trailer 大小、Body Bytes与Fixed Trailer Bytes组成大 Body 会被切分为多个 Payload Frame 传输。协议常量定义在 rpc2.goVersion 0、Magic 0xee、Header Cell 为 4 字节、单消息最大编码体_maxCodecerSize 16 2016MB。RPC2 在 blobstore 中承担核心服务间通信职责。以 cmd 框架 为例各服务模块的通用配置结构cmd.Config中包含Rpc2Server *rpc2.Server字段JSON 键rpc2_server当模块实现了SetUp2回调时进程启动后会并行拉起 RPC2 服务与 HTTP 服务。已启用 RPC2 的真实模块包括 shardnode、clustermgr、blobnode、proxy 等纠删码核心服务。TransportConfigsmux 传输层配置TransportConfig是 RPC2 连接复用层smux的配置Server 与 Client 的 Connector 均可携带json:transport,omitempty未配置时使用默认值。其定义位于 blobstore/common/rpc2/rpc2.go#L51-L59与文档中的结构完全一致type TransportConfig struct { Version int json:version KeepAliveDisabled bool json:keepalive_disabled KeepAliveInterval util.Duration json:keepalive_interval KeepAliveTimeout util.Duration json:keepalive_timeout MaxFrameSize int json:max_frame_size MaxReceiveBuffer int json:max_receive_buffer MaxStreamBuffer int json:max_stream_buffer }各字段说明如下字段JSON 键类型含义Versionversionintsmux 协议版本仅支持 1 和 2KeepAliveDisabledkeepalive_disabledbool是否禁用保活NOP 探测机制KeepAliveIntervalkeepalive_intervalutil.Duration向对端发送 NOP 保活命令的间隔KeepAliveTimeoutkeepalive_timeoututil.Duration超过该时长未收到任何数据则关闭 SessionMaxFrameSizemax_frame_sizeint发送给对端单个 Frame 的最大字节数含帧头MaxReceiveBuffermax_receive_bufferint缓冲区池中数据量的上限MaxStreamBuffermax_stream_bufferint单条 Stream 上数据量的上限默认值TransportConfig的默认值来自两层RPC2 的 DefaultTransportConfig() 设置Version 2其余字段取自 smux 传输层 transport.DefaultConfig()参数默认值VersionRPC2 层默认 2传输层 DefaultConfig 为 1KeepAliveDisabledfalse保活开启KeepAliveInterval10sKeepAliveTimeout30sMaxFrameSize1 201MBMaxReceiveBuffer32 2032MBMaxStreamBuffer4 204MB校验规则传输层 VerifyConfig() 会对配置做严格校验配置不合法将直接导致 Session 创建失败注意以下约束Version必须为 1 或 2未禁用保活时KeepAliveInterval必须为正数且KeepAliveTimeout必须大于KeepAliveInterval如默认 30s 10sMaxFrameSize必须为正数且不能超过 1677721516MB-1与 Frame 长度字段的 24bit 编码上限对应MaxReceiveBuffer、MaxStreamBuffer必须为正数且MaxStreamBuffer不能大于MaxReceiveBuffer、不能超过math.MaxInt32。配置项通过TransportConfig.Transport()方法rpc2.go#L61-L74转换为传输层transport.Config后使用。Server 配置NetworkAddress监听地址服务端监听地址使用NetworkAddress结构表示type NetworkAddress struct { Network string json:network Address string json:address }Network目前仅支持tcp从 server.go#L38-L45 的newListener实现可见其他网络类型会直接报错rpc2: not implements addr.Network。连接器Connector侧虽预留了rdma分支见 connector.go#L74-L78但当前实现同样返回未实现错误。AddressTCP 监听地址形如:9100或127.0.0.1:9100。Server 结构type Server struct { Name string json:name Addresses []NetworkAddress json:addresses // Request Header| // No Timeout | // | Request Body | // | ReadTimeout | // | Response Header Body | // | WriteTimeout | ReadTimeout util.Duration json:read_timeout WriteTimeout util.Duration json:write_timeout Transport *TransportConfig json:transport,omitempty BufioReaderSize int json:bufio_reader_size ConnectionWriteV bool json:connection_writev StatDuration util.Duration json:stat_duration }对应源码 server.go#L47-L77字段语义如下字段JSON 键含义Namename服务名用于日志与统计标识Addressesaddresses监听地址列表支持多地址Serve()会为第一个地址同步监听其余地址各起一个 goroutine 监听server.go#L168-L188ReadTimeoutread_timeout请求读取超时对应请求头部无超时→ 请求体ReadTimeout→ 响应头/响应体阶段见结构体注释通过stream.SetReadDeadline生效server.go#L79-L83为 0 时不设置WriteTimeoutwrite_timeout响应写出超时对应响应头/响应体WriteTimeout阶段通过stream.SetWriteDeadline生效server.go#L85-L89Transporttransportsmux 传输配置omitempty可省略为 nil 时在Listen()中自动使用DefaultTransportConfig()server.go#L221-L223BufioReaderSizebufio_reader_size每个连接上 bufio.Reader 的缓冲区大小字节用于聚合小包读降低系统调用次数connector.go#L48-L56为 0 时不启用 bufioConnectionWriteVconnection_writev是否启用 writev 批量写net.Buffers聚合写出StatDurationstat_duration周期性输出连接统计日志的间隔大于 0 时启动 ticker定期打印 listener/session/stream 数量server.go#L91-L115时间类字段的类型是util.Durationblobstore/util/util.go#L88-L90JSON 中既支持字符串如3s、10s经time.ParseDuration解析也支持数字按纳秒解释。服务生命周期服务端通过Serve()启动、Shutdown(ctx)优雅退出server.go#L135-L160Shutdown会关闭全部 listener、触发onShutdown回调并至少等待 5 秒或 ctx 取消便于存量请求完成RegisterOnShutdown可注册退出钩子。每次 Accept 到连接后服务端以transport.Server建立 Session再异步处理其中的多个 Streamserver.go#L236-L243。Client 配置客户端配置由ConnectorConfig连接器与Client请求控制两部分组成定义于 client.go#L32-L58type ConnectorConfig struct { Transport *TransportConfig json:transport,omitempty BufioReaderSize int json:bufio_reader_size ConnectionWriteV bool json:connection_writev // tcp or rdma Network string json:network DialTimeout util.Duration json:dial_timeout MaxSessionPerAddress int json:max_session_per_address MaxStreamPerSession int json:max_stream_per_session } type Client struct { ConnectorConfig ConnectorConfig json:connector Retry int json:retry // | Request | Response Header | Response Body | // | Request Timeout | Response Timeout | // | Timeout | Timeout util.Duration json:timeout RequestTimeout util.Duration json:request_timeout ResponseTimeout util.Duration json:response_timeout Auth auth_proto.Config json:auth LbConfig struct { Hosts []string json:hosts BackupHosts []string json:backup_hosts HostTryTimes int json:host_try_times FailRetryIntervalS int json:fail_retry_interval_s MaxFailsPeriodS int json:max_fails_period_s } json:lb }ConnectorConfig连接管理连接器Connector负责 Session/Stream 的创建、复用与限流其配置定义于 connector.go#L124-L140字段JSON 键默认值含义Transporttransport默认传输配置smux 传输配置见上文BufioReaderSizebufio_reader_size0不启用客户端连接的 bufio 读缓冲大小ConnectionWriteVconnection_writevfalse是否启用 writev 批量写Networknetwork必填tcp或rdma传输网络类型defaultConnector对未识别的类型会panicconnector.go#L146-L158DialTimeoutdial_timeout0拨号超时作用于net.Dialer.TimeoutMaxSessionPerAddressmax_session_per_address4每个目标地址允许建立的 Session 数上限defaulter.LessOrEqual(config.MaxSessionPerAddress, 4)即小于等于该值否则取默认 4connector.go#L142-L144MaxStreamPerSessionmax_stream_per_session1024每个 Session 上允许打开的 Stream 数上限通过count.New()限流器控制连接器还内置了一个未出现在原文档、但值得注意的字段WaitTimeoutJSON 键wait_timeout当某地址的 Session 数达到上限时请求会进入等待队列wait_timeout 0表示最长等待时间超时返回ErrConnLimited 0表示无限等待 0表示不等待、立即返回ErrConnLimitedconnector.go#L288-L324。Get/Put的复用逻辑connector.go#L179-L358值得展开获取 Stream 时优先复用已打开的空闲 Streamss.ch缓冲通道没有空闲 Stream 且未达MaxStreamPerSession时新建新建 Stream 也失败时才考虑新建 Session同一地址的并发建连通过 64 槽位creators数组按地址 crc32 分桶串行化。归还时若连接已损坏broken或已关闭则直接关闭否则放回缓冲通道复用每个连接还带statsGet每 1024 次调用会打印一次连接统计connector.go#L172-L177。Client重试、超时与认证字段JSON 键默认值含义ConnectorConfigconnector—连接器配置见上Retryretry3请求失败后的重试次数Do()首次初始化时执行defaulter.LessOrEqual(c.Retry, 3)client.go#L82-L92即未配置时取 3RetryOn—代码内字段状态码 500判定是否重试的回调默认func(err error) bool { return DetectStatusCode(err) 500 }即仅对 5xx 服务端错误重试Timeouttimeout0整体超时同时作用于请求与响应阶段见结构体注释中的时间轴示意RequestTimeoutrequest_timeout0请求阶段超时覆盖Request → Response Header区间ResponseTimeoutresponse_timeout0响应阶段超时覆盖Response Header → Response Body区间Authauth默认关闭客户端认证配置见下文超时的实际计算位于 client.go#L203-L223requestDeadline取Timeout与RequestTimeout中较早的时刻并与 ctx 的 deadline 取早responseDeadline同理取Timeout与ResponseTimeout中较早者ctx 自带 deadline 时以三者最早者为准。重试流程client.go#L111-L146使用retry.Timed(c.Retry, 1)间隔 1 的定时重试失败后若RetryOn判定可重试则通过req.GetBody重新生成请求体并切换到下一个候选地址使用负载均衡时还会调用c.Selector.SetFailHost(lbHost)标记故障节点。Auth认证配置Auth的类型是auth_proto.Configblobstore/common/rpc/auth/proto/auth.go#L35-L38type Config struct { EnableAuth bool json:enable_auth Secret string json:secret }EnableAuth是否启用认证服务端同样通过该配置在 cmd 框架 中决定是否挂载rpc2认证拦截器。Secret共享密钥。启用后客户端会在每个请求的BLOB-STORE-AUTH-TOKENHeader 中写入基于时间戳 请求路径 密钥计算的 Tokenclient.go#L101-L104服务端拦截器校验 Token 一致性。LbConfig负载均衡LbConfigJSON 键lb用于配置基于 Selector 的客户端负载均衡仅当Hosts与BackupHosts之和大于 0 时生效client.go#L225-L242字段JSON 键默认值含义Hostshosts空主用节点列表形如http://127.0.0.1:9998BackupHostsbackup_hosts空备用节点列表HostTryTimeshost_try_times不超过主机总数单个主机被连续尝试的次数上限defaulter.LessOrEqual(lb.HostTryTimes, hosts)FailRetryIntervalSfail_retry_interval_s300秒失败节点被隔离后重试的间隔MaxFailsPeriodSmax_fails_period_s10秒统计失败的时间窗口窗口内失败次数过多触发隔离当Client.Do()中req.RemoteAddr 即未指定目标地址时走负载均衡路径从 Selector 获取可用主机、设置req.RemoteAddr失败后将该主机标记为 failclient.go#L94-L146。完整配置示例与字段对照官方最小示例blobstore/common/rpc2/example/server.conf 给出了 RPC2 服务端的最简配置{ shutdown_timeout_s: 1, rpc2_server: { name: example_rpc2, bufio_reader_size: 10240000, stat_duration: 3s } }示例代码位于 blobstore/common/rpc2/examplemain.go支持server、client、stream三种运行模式server.go展示了 Router 注册/ping、/kick、/error、/panic、/stream等路径以及 Interceptor、Middleware、AfterBody、Trailer、流式GenericServerStream的用法client.go与stream.go展示了普通请求含参数、Body、Trailer、CRC 选项、重试、超时与流式请求StreamClient/NewStreamRequest的调用方式。shardnode 生产级示例以纠删码 shardnode 服务为例blobstore/cmd/shardnode/shardnode.confRPC2 服务端配置片段如下{ rpc2_server: { name: shardnode, addresses: [ { network: tcp, address: :9100 } ], bufio_reader_size: 10240000, stat_duration: 3s }, ... cm_config: { hosts: [ http://127.0.0.1:9998 ] } }其中bufio_reader_size: 10240000约 10MB提供了较大的读缓冲stat_duration: 3s每 3 秒输出一次连接统计cm_config.hosts供该服务以客户端身份访问 clustermgr。可以看出服务端配置只需在进程级配置文件的rpc2_server键下填写Server结构字段客户端配置则由各模块在使用rpc2.Client时以代码方式构造如示例中的rpc2.Client{ConnectorConfig: rpc2.ConnectorConfig{Network: tcp}, Retry: 10, Timeout: ...}。结合源码自检配置清单配置完成后可以按以下清单结合源码快速自检协议版本transport.Version只能填 1 或 2否则VerifyConfig直接报错保活约束开启保活时keepalive_timeout必须大于keepalive_interval缓冲大小关系max_stream_buffer≤max_receive_buffer且max_frame_size在 1 ~ 16777215 之间网络类型network只支持tcprdma尚未实现填错会导致拨号失败或 panic会话上限客户端max_session_per_address默认 4、max_stream_per_session默认 1024连接打满后按wait_timeout决定等待还是直接返回ErrConnLimited对应错误码 400超时语义timeout是总超时request_timeout覆盖请求阶段response_timeout覆盖响应阶段三者与 ctx deadline 取最早值负载均衡只有配置了lb.hosts或lb.backup_hosts才会创建 Selector请求时RemoteAddr为空才会走 LB 路径host_try_times会被钳制为不超过主机总数。小结RPC2 是 CubeFS blobstore 内部高性能通信的关键组件其配置体系分为三层传输层TransportConfigsmux 多路复用参数、服务端Server监听地址、读写超时、缓冲与统计、客户端ConnectorConfig Client连接池、重试、超时、认证与负载均衡。v3.6.0 起各项参数均具备合理默认值日常部署通常只需像 shardnode.conf 那样显式配置监听地址、bufio_reader_size与stat_duration其余按需调整。深入阅读 rpc2 包源码、smux 传输层 与 连接器实现可以进一步理解每个参数对吞吐、时延与连接稳定性的实际影响。赞分享存储分布式文件系统对象存储云原生【免费下载链接】cubefscloud-native distributed storage项目地址https://gitcode.com/gh_mirrors/cu/cubefs点击查看免费下载相关推荐CubeFS blobstore rpc2 transport基于 smux 的多路复用传输层深入解析CubeFS blobstore rpc2 transport基于 smux 的多路复用传输层深入解析 CubeFS云原生分布式存储的 blobstore存储分布式文件系统对象存储云原生CubeFS Blobstore Scheduler 配置详解均衡、磁盘修复、删除与修补任务参数实战指南CubeFS Blobstore Scheduler 配置详解均衡、磁盘修复、删除与修补任务参数实战指南 Scheduler 是 CubeFS 纠删码Blo存储分布式文件系统对象存储云原生CubeFS BlobStore Access 模块配置详解接入网关的核心参数与实战调优CubeFS BlobStore Access 模块配置详解接入网关的核心参数与实战调优 导读 Access 是 CubeFS BlobStore纠删码存储存储分布式文件系统对象存储云原生上一篇简历美化神器gh_mirrors/re/resume模板FontAwesome图标应用指南下一篇如何用vue-page-stack实现Vue3应用页面状态缓存5分钟快速上手教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

大众点评爬虫数据规约详解:Sniper 项目搜索与评论字段的完整对齐方案

大众点评爬虫数据规约详解:Sniper 项目搜索与评论字段的完整对齐方案

网页爬虫 【免费下载链接】dianping_spider 大众点评爬虫(全站可爬,解决动态字体加密,非OCR)。持续更新 项目地址: https://gitcode.com/gh_mirrors/di/dianping_spider 点击查看 免费下载 大众点评反爬机制复杂&…

2026/10/5 13:02:58 阅读更多 →
nunif 字体资源模块实战:基于 font_resource 下载管理日文字体并生成元数据清单

nunif 字体资源模块实战:基于 font_resource 下载管理日文字体并生成元数据清单

人工智能深度学习计算机视觉图像处理视频处理预训练 【免费下载链接】nunif Misc; latest version of waifu2x; 2D video to stereo 3D video conversion 项目地址: https://gitcode.com/gh_mirrors/nu/nunif 点击查看 免费下载 本篇技术指南聚焦开源项目 nunif 中…

2026/10/5 13:02:58 阅读更多 →
勒索行为也能做基因检测:安当RDM 的加密行为识别

勒索行为也能做基因检测:安当RDM 的加密行为识别

一、为什么特征库思路在勒索面前会失灵 做防勒索软件选型时,很多工程师第一反应是"装个杀毒、更新病毒库"。但勒索病毒的对抗逻辑和一般恶意程序不同:它的核心动作是"加密用户文件",而加密本身是一组完全合法的、操作系统…

2026/10/5 13:02:57 阅读更多 →

最新新闻

Kimi K2 驱动 AI 文档阅读助手实战:零代码用 Claude Code 一天打造全栈文档管理网站

Kimi K2 驱动 AI 文档阅读助手实战:零代码用 Claude Code 一天打造全栈文档管理网站

文档教程知识库人工智能 【免费下载链接】ai-guide 程序员鱼皮的 AI 资源大全 Vibe Coding 零基础教程,分享 OpenClaw 保姆级教程、大模型玩法(DeepSeek / GPT / Gemini / Claude / GLM)、最新 AI 资讯、Prompt 提示词大全、AI 知识百科&…

2026/10/5 14:21:41 阅读更多 →
SAP物料账报错ML4HMASTER113与ML4HRUN053根因解析

SAP物料账报错ML4HMASTER113与ML4HRUN053根因解析

1. 项目概述:这不是一次简单的报错修复,而是一次对SAP物料账(Material Ledger)底层逻辑的深度体检“SAP-ML章<<<<第一节:物料账报错处理>>&#x…

2026/10/5 14:21:40 阅读更多 →
本科毕设遥感图像分类实战:72小时落地深度学习方案

本科毕设遥感图像分类实战:72小时落地深度学习方案

1. 这不是“速成课”,而是毕设场景下真正能落地的遥感图像分类实战路径 我带过三届毕业设计,每年四月总有一批学生抱着“毕设有救了”的心态冲进实验室,手里攥着刚下载的Sentinel-2数据、GitHub上抄来的PyTorch代码、还有导师一句“你试试用深…

2026/10/5 14:21:40 阅读更多 →
C++ STL:list 容器详解与模拟实现——从双向链表到反向迭代器

C++ STL:list 容器详解与模拟实现——从双向链表到反向迭代器

C STL:list 容器详解与模拟实现——从双向链表到反向迭代器 文章目录C STL:list 容器详解与模拟实现——从双向链表到反向迭代器1 list 的基本概念2 list 的构造2.1 构造空 list2.2 构造 n 个相同元素2.3 拷贝构造2.4 使用迭代器区间构造3 list 的迭代器…

2026/10/5 14:21:40 阅读更多 →
深入理解Spring Data:从JDBC样板代码到Repository自动化原理

深入理解Spring Data:从JDBC样板代码到Repository自动化原理

过去几年里,我带过不少刚入行的Java开发,大多数人第一次听到“Spring Data”这个词时,第一反应都是:这是个ORM框架吧?是不是跟MyBatis差不多?等真正接手项目,看到Service层里一个个接口注入、方…

2026/10/5 14:20:39 阅读更多 →
PHP短视频源码开发:JSON数据源统一接入与API适配层设计实践

PHP短视频源码开发:JSON数据源统一接入与API适配层设计实践

在做PHP开源短视频源码的时候,我遇到的第一件事不是播放器怎么接,也不是会员体系怎么做,而是第三方数据源的JSON格式乱到让人怀疑人生。短剧接口返回的字段和TVBox仓库对不上,TVBox仓库的结构和zyplayer视频源又不是一回事&#x…

2026/10/5 14:20:39 阅读更多 →

日新闻

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

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

2026/10/5 0:00:22 阅读更多 →
AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

1. 从“plugins”这个词说起:它到底在解决什么问题如果你最近在折腾 AI 编程工具,尤其是 Cursor、Codex CLI、Claude Code 这类带 CLI 的编辑器或命令行助手,那你大概率绕不开一个词——plugins。这个词本身不新鲜,从浏览器到 IDE…

2026/10/5 0:00:23 阅读更多 →
第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

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

2026/10/5 0:00:23 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/5 5:06:42 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/5 1:10:22 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/5 3:06:17 阅读更多 →

月新闻

我发现了一个新思路:用 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/4 11:40:45 阅读更多 →
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/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练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/4 20:14:29 阅读更多 →