goim 集群部署与推送协议实战指南:Go 语言实现的 IM 与实时推送服务
后端即时通讯微服务【免费下载链接】goimgoim项目地址https://gitcode.com/gh_mirrors/go/goim点击查看免费下载goimTerry-Mao/goim是一个用纯 Go 语言编写、支持集群部署的 IM即时通讯与推送通知服务器能够承载单用户推送、批量推送、房间推送和全量广播等场景。本文以仓库的 README_en.md 为主线完整讲解其核心特性、依赖安装、集群部署、配置参数并结合 推送 HTTP 协议 与 客户端长连接协议 给出可直接复用的验证与接入方法读完即可动手搭建一套属于自己的推送集群。项目概览与核心特性goim 定位为轻量、高性能的 IM 及实时推送服务集群。官方英文文档将其能力归纳为以下要点每条都对应仓库中实际的代码实现特性说明源码佐证轻量级、高性能、纯 Golang服务端全部由 Go 编写无重型运行时依赖全部代码位于 internal 与 cmd 目录支持单推、多推、房间推、广播提供 4 类 HTTP 推送接口internal/logic/http/push.go单 Key 多订阅者可限制最大订阅数一个用户 IDmid可在多个设备/通道同时在线internal/logic/dao/redis.go 中的 mid→key 映射心跳支持应用心跳、TCP、KeepAlive客户端与服务器保持长连接活性api/protocol/operation.go 中OpHeartbeat与OpHeartbeatReply支持鉴权未授权用户不能订阅连接必须携带 token 完成认证internal/comet/server_websocket.go 的authWebsocket多协议支持WebSocket、TCP客户端接入层同时监听两套协议internal/comet/server_tcp.go 与 internal/comet/server_websocket.go可伸缩架构job、logic 模块可动态无限扩展internal/job/job.go 通过 Discovery 动态发现 comet 节点基于 Kafka 的异步推送推送消息先入 Kafka再由 job 异步消费分发internal/logic/dao/kafka.go架构上goim v2.0 由logic逻辑层、comet长连接接入层、job推送任务层三类无状态/可扩展节点构成配合Kafka异步消息队列、Redis在线状态与 key 映射、Discovery服务注册发现三个基础设施组件协同工作安装依赖从零准备运行环境原文档给出的安装流程面向 Linux 服务器以yum包管理为例共分为三步其中前两步是 goim 自身运行的前提1. 安装 Java 运行环境goim 本身是纯 Go 服务不需要 JVM安装 Java 是因为Kafka 依赖 ZooKeeper/JVM才能运行$ yum -y install java-1.7.0-openjdk若使用较新版本的 Kafka建议按所选 Kafka 版本要求选择对应的 JDK 版本例如 JDK 8仓库也提供了 scripts/jdk8.sh 与 scripts/kafka.sh、scripts/zk.sh 等辅助脚本可供参考。2. 安装并启动 KafkaKafka 是整个异步推送链路的“传输带”logic 把推送消息序列化后写入 Kafka 的goim-push-topic主题job 从该主题消费后转发给 comet。安装与启动请参照 Kafka 官方 QuickStart 文档仓库中 internal/logic/dao/kafka.go 使用 sarama 客户端发送消息internal/job/job.go 使用sarama-cluster以消费者组方式拉取消息。启动 Kafka 后默认监听127.0.0.1:9092与各示例配置中的brokers保持一致。3. 安装 Go 语言环境按官方安装包安装 Go 后配置环境变量export GOROOT/usr/local/go export PATH$PATH:$GOROOT/bin export GOPATH/data/apps/go source /etc/profile当前仓库为 Go Module 工程见 go.mod因此并不强制依赖 GOPATH 目录结构可以直接在任意目录 clone 后构建。部署 goim 集群原文档描述了早期版本基于$GOPATH/src/goim与router模块的部署方式当前仓库已演进为 goim v2.0见 README.md 顶部模块精简为 logic、comet、job 三个并以 Discovery 取代了有状态的 router 节点。下面先完整保留原文档的经典部署流程再给出当前仓库的实际部署方式。方式一经典流程对应原英文文档$ yum install git $ cd $GOPATH/src $ git clone https://github.com/Terry-Mao/goim.git $ cd $GOPATH/src/goim $ go get ./...然后逐个编译并安装 router、logic、comet、job 模块配置文件需按实际机器环境调整$ cd $GOPATH/src/goim/router $ go install $ cp router-example.conf $GOPATH/bin/router.conf $ cp router-log.xml $GOPATH/bin/ $ cd ../logic/ $ go install $ cp logic-example.conf $GOPATH/bin/logic.conf $ cp logic-log.xml $GOPATH/bin/ $ cd ../comet/ $ go install $ cp comet-example.conf $GOPATH/bin/comet.conf $ cp comet-log.xml $GOPATH/bin/ $ cd ../logic/job/ $ go install $ cp job-example.conf $GOPATH/bin/job.conf $ cp job-log.xml $GOPATH/bin/注意旧版router目录与*-example.conf、*-log.xml文件在 v2.0 仓库中已不存在此流程适合从早期版本升级/参考的场景v2.0 请使用下面的方式二。方式二v2.0 仓库实际构建方式推荐当前仓库提供了统一的 Makefile 构建与启动入口见 Makefilemake build # 编译三个模块并生成 target/ 目录make build会创建target/目录将 cmd/comet/comet-example.toml、cmd/logic/logic-example.toml、cmd/job/job-example.toml 复制为target/*.toml并编译出target/comet、target/logic、target/job三个可执行文件。启动时既可以用make run一键拉起也可以手动指定 flag 参数region/zone/deploy.env用于 Discovery 注册weight用于负载均衡权重comet 还需addrs指定对外 IPnohup target/logic -conftarget/logic.toml -regionsh -zonesh001 -deploy.envdev -weight10 21 target/logic.log nohup target/comet -conftarget/comet.toml -regionsh -zonesh001 -deploy.envdev -weight10 -addrs127.0.0.1 21 target/comet.log nohup target/job -conftarget/job.toml -regionsh -zonesh001 -deploy.envdev 21 target/job.log 停止服务使用make stop。如果启动失败请查看对应进程的日志文件如panic-*.log定位问题。环境变量与命令行参数每个模块的配置解析都位于各自的conf/conf.go中支持“环境变量优先、命令行 flag 覆盖”的取值方式参数环境变量说明-regionREGION可用区域如sh-zoneZONE可用分区如sh001/sh002-deploy.envDEPLOY_ENV部署环境如dev/fat1/uat/pre/prod-host机器 hostname机器主机名默认取os.Hostname()-weightWEIGHT负载均衡权重-addrs仅 cometADDRS服务器对外公网 IP多个用逗号分隔-offline仅 cometOFFLINE节点下线标记-debug仅 cometDEBUG调试日志开关例如 supervisord 托管时可在配置中写入environmentREGIONsh,ZONEsh001,DEPLOY_ENVdev。详见 internal/comet/conf/conf.go、internal/logic/conf/conf.go、internal/job/conf/conf.go。配置文件逐项详解原英文文档中Configurations章节标注为 TODO本节基于仓库真实配置文件补齐完整参数说明这也是把 goim 部署到生产环境的必修课。comet 接入层cmd/comet/comet-example.toml[discovery] nodes [127.0.0.1:7171] # Discovery 注册中心地址 [rpcServer] addr :3109 # comet 对外 gRPC 服务地址job 推送用 timeout 1s [rpcClient] dial 1s # 连接 logic 的拨号超时 timeout 1s [tcp] bind [:3101] # TCP 长连接监听地址可配多个 sndbuf 4096 # 发送缓冲区大小字节 rcvbuf 4096 # 接收缓冲区大小字节 keepalive false # 是否开启 TCP KeepAlive reader 32 # Reader 协程数配合 round 池 readBuf 1024 readBufSize 8192 writer 32 # Writer 协程数 writeBuf 1024 writeBufSize 8192 [websocket] bind [:3102] # WebSocket 监听地址 tlsOpen false # 是否开启 TLS tlsBind [:3103] # WSS 监听地址 certFile ../../cert.pem # 证书路径 privateFile ../../private.pem # 私钥路径 [protocol] timer 32 # 定时器分片数 timerSize 2048 # 每个分片的定时器容量 svrProto 10 # 服务器侧 proto 环形队列容量 cliProto 5 # 客户端侧 proto 环形队列容量 handshakeTimeout 8s # 握手超时时间 [whitelist] Whitelist [123] # 白名单用户 mid用于调试 WhiteLog /tmp/white_list.log # 白名单日志输出文件 [bucket] size 32 # bucket 数量影响并发分片与在线分布 channel 1024 # 每个 bucket 的 channel 容量 room 1024 # 每个 bucket 的房间容量 routineAmount 32 # 广播推送协程数 routineSize 1024 # 广播推送协程缓冲队列大小bucket是 comet 的核心数据分片每个连接channel按 key 哈希落入某个 bucket广播推送时并行向所有 bucket 分发见 internal/comet/bucket.go 与 internal/comet/grpc/server.go 中PushMsg/Broadcast/BroadcastRoom的实现。svrProto/cliProto对应 internal/comet/channel.go 中客户端上行与服务器下行两个环形缓冲队列的深度直接影响高并发下的吞吐与背压。示例证书 examples/cert.pem 与 examples/private.pem 可配合tlsOpen true做本地 WSS 验证。logic 逻辑层cmd/logic/logic-example.toml[discovery] nodes [127.0.0.1:7171] [regions] # 区域 - 省份映射用于节点调度权重 bj [北京,天津,河北,山东,山西,内蒙古,辽宁,吉林,黑龙江,甘肃,宁夏,新疆] sh [上海,江苏,浙江,安徽,江西,湖北,重庆,陕西,青海,河南,台湾] gz [广东,福建,广西,海南,湖南,四川,贵州,云南,西藏,香港,澳门] [node] defaultDomain conn.goim.io # 默认接入域名 hostDomain .goim.io # 接入域名后缀 heartbeat 4m # 应用层心跳间隔 heartbeatMax 2 # 心跳最大容忍次数超过则判定离线 tcpPort 3101 # 对外 TCP 端口comet 暴露 wsPort 3102 # 对外 WebSocket 端口 wssPort 3103 # 对外 WSS 端口 regionWeight 1.6 # 同区域权重 [backoff] # 节点重连退避策略 maxDelay 300 baseDelay 3 factor 1.8 jitter 0.3 [rpcServer] network tcp addr :3119 # logic 的 gRPC 服务地址comet 连接 timeout 1s [rpcClient] dial 1s timeout 1s [httpServer] network tcp addr :3111 # HTTP 推送接口监听端口 readTimeout 1s writeTimeout 1s [kafka] topic goim-push-topic # 推送消息主题 brokers [127.0.0.1:9092] # Kafka 集群地址 [redis] network tcp addr 127.0.0.1:6379 # Redis 地址 active 60000 # 最大活跃连接数 idle 1024 # 最大空闲连接数 dialTimeout 200ms readTimeout 500ms writeTimeout 500ms idleTimeout 120s expire 30m # mid/key 映射过期时间node段中的tcpPort/wsPort/wssPort必须与 comet 侧 [tcp]/[websocket] 的监听端口一一对应否则客户端通过域名接入时会连错端口。redis的expire 30m决定了在线映射的有效期它需要大于node.heartbeat * heartbeatMax即 4m × 2 8m否则心跳周期稍长就会被判定离线。job 任务层cmd/job/job-example.toml[discovery] nodes [127.0.0.1:7171] [kafka] topic goim-push-topic # 与 logic 保持同一个主题 group goim-push-group-job # 消费者组 ID brokers [127.0.0.1:9092]job 以消费者组方式消费 Kafka 中的推送消息因此多个 job 节点使用同一个group即可自动分区负载均衡同时 job 会通过 Discovery 监听goim.comet服务的实例变化动态建立/销毁到各 comet 节点的 gRPC 连接见 internal/job/job.go 的watchComet/newAddress。启动服务与日志排查参照原文档启动后各进程的崩溃日志可分别落到独立文件方便按模块排查$ cd /$GOPATH/bin $ nohup $GOPATH/bin/router -c $GOPATH/bin/router.conf 21 /data/logs/goim/panic-router.log $ nohup $GOPATH/bin/logic -c $GOPATH/bin/logic.conf 21 /data/logs/goim/panic-logic.log $ nohup $GOPATH/bin/comet -c $GOPATH/bin/comet.conf 21 /data/logs/goim/panic-comet.log $ nohup $GOPATH/bin/job -c $GOPATH/bin/job.conf 21 /data/logs/goim/panic-job.log 启动顺序建议为Kafka → Redis/Discovery → logic → comet → job。如果失败优先检查对应panic-*.log中的连接错误Kafka broker 不可达、Discovery 未注册、端口被占用等。验证推送HTTP 推送接口实战原文档将 推送 HTTP 协议 作为部署完成后的第一道验收步骤。logic 的 HTTP 服务监听:3111路由注册见 internal/logic/http/server.go实际路径前缀为/goim如/goim/push/room与旧文档路径有所差异。接口一览名称URLHTTP 方法single push/1/pushPOSTmultiple push/1/pushsPOSTroom push/1/push/roomPOSTbroadcasting/1/push/allPOST公共响应体响应码说明1成功65535内部错误{ ret: 1 }单用户推送single pushuid即推送目标用户 id消息体为任意 JSONcurl -d {\test\:1} http://127.0.0.1:7172/1/push?uid0{ret: 1}批量推送multiple pushu为 uid 数组m为消息体可一次覆盖多个在线用户curl -d {\u\:[1,2,3,4,5],\m\:{\test\:1}} http://127.0.0.1:7172/1/pushs{ret: 1}房间推送room pushrid为房间 id消息将发给该房间内的所有在线连接curl -d {\test\: 1} http://127.0.0.1:7172/1/push/room?rid1{ret: 1}全量广播broadcastingcurl -d {\test\: 1} http://127.0.0.1:7172/1/push/all{ret: 1}推送链路源码级解读在 internal/logic/http/push.go 中四个接口分别调用PushKeys/PushMids/PushRoom/PushAll见 internal/logic/push.go按 key 推送PushKeys先从 Redis 用MGET批量查出每个 key 所在的 comet 服务器internal/logic/dao/redis.go 的ServersByKeys按服务器分组后写入 Kafka按 mid 推送PushMids通过KeysByMids用HGETALL取出每个 mid 下的全部在线 key实现“单用户多设备同时收到消息”房间/广播PushRoom与PushAll直接构造pb.PushMsg类型分别为ROOM、BROADCAST写入 Kafka由 job 消费后调用 comet 的 gRPC 接口见 internal/comet/grpc/server.go完成BroadcastRoom或带Speed限速的Broadcast分发。整个链路为logic → Kafka → job → comet(grpc) → channel/room → 客户端推送请求在 logic 处即返回实际下发是异步完成的这正是其高吞吐的核心设计。客户端长连接协议原文档链接的 Comet 客户端协议 说明了客户端如何接入长连接层。comet 同时支持 WebSocket 与 TCP 两套协议接入后即可收到上述推送。WebSocket 协议请求地址ws://DOMAIN/sub以 JSON Frame 通信请求与响应同构{ ver: 102, op: 10, seq: 10, body: {data: xxx} }参数是否必填类型说明vertrueint协议版本号optrueint操作码seqtrueint序列号服务器返回时对应客户端发送的 seqbody-json推送的 JSON 消息体在服务端comet 要求 WebSocket 的请求路径必须为/subinternal/comet/server_websocket.go 中校验req.RequestURI ! /sub即断开握手完成后进入鉴权流程authWebsocket客户端必须发送OpAuth操作码完成认证服务器回OpAuthReply否则无法订阅。TCP 协议请求地址tcp://DOMAIN采用二进制帧响应结构同请求参数是否必填类型说明package lengthtrueint32 大端包总长度header lengthtrueint16 大端头部长度vertrueint16 大端协议版本operationtrueint32 大端操作码seqtrueint32 大端序列号对应 jsonp 回调bodyfalsebinary消息体长度为package length - header length操作码Operations原文档表格给出了 4 个基础操作码仓库中 api/protocol/operation.go 定义了完整的操作码集合操作码含义源码常量2客户端发送心跳OpHeartbeat3服务器回复心跳OpHeartbeatReply7鉴权请求OpAuth8鉴权响应OpAuthReply0/1握手请求/响应OpHandshake/OpHandshakeReply4/5发送消息/响应OpSendMsg/OpSendMsgReply9原始消息OpRaw10/11proto 就绪/结束OpProtoReady/OpProtoFinish12/13切换房间/响应OpChangeRoom/OpChangeRoomReply14/15订阅/响应OpSub/OpSubReply16/17取消订阅/响应OpUnsub/OpUnsubReply心跳处理逻辑可在 internal/comet/server_websocket.go 中看到客户端发来OpHeartbeat后服务端改写为OpHeartbeatReply并重置定时器同时周期性通过 gRPC 向 logic 续报在线状态。客户端示例与参考文档仓库自带一个基于静态文件的 WebSocket 客户端 Demoexamples/javascript 目录通过main.go在:1999端口提供静态服务浏览器打开 examples/javascript/index.html 即可连接 comet 并实时观察推送消息消息推送逻辑见 examples/javascript/client.js$ cd examples/javascript $ go run main.go更多权威参考推送 HTTP 协议中文文档 与 英文文档Comet 客户端协议中文文档 与 英文文档协议结构图 与 握手流程说明中文总览见 README_cn.md英文总览见 README_en.md至此你已经掌握了 goim 的依赖准备、集群部署、配置调优、推送接口验证与客户端接入的完整闭环可以在自己的服务器上搭建一套可横向扩展的实时推送系统。赞分享后端即时通讯微服务【免费下载链接】goimgoim项目地址https://gitcode.com/gh_mirrors/go/goim点击查看免费下载相关推荐goim v2.0基于 Golang 的高性能 IM 与实时推送服务集群实战指南goim v2.0基于 Golang 的高性能 IM 与实时推送服务集群实战指南 goim 是一个用纯 Golang 编写的即时通讯IM服务端及实时推送集后端即时通讯微服务5分钟掌握SAMKeychainiOS/macOS钥匙串安全存储终极指南5分钟掌握SAMKeychainiOS/macOS钥匙串安全存储终极指南 在iOS和macOS开发中安全存储用户敏感数据一直是开发者面临的重要挑战。SAMK应用安全MidJourney-Wrapper工作原理揭秘Discord消息交互与API调用实现MidJourney Wrapper工作原理揭秘Discord消息交互与API调用实现 MidJourney Wrapper是一款通过Discord消息交互实上一篇Newton中的触觉反馈接触力计算与应用全解析下一篇react-native-code-push性能分析报告更新流程各阶段耗时优化创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

基于DUT-OMRON的Unet二值分割实战:从数据处理到训练避坑

基于DUT-OMRON的Unet二值分割实战:从数据处理到训练避坑

简介:面向深度学习图像分割初学者与研究者的Unet实战项目,配套DUT-OMRON二值图像分割数据集,可直接用于训练、验证与二次开发。压缩包内共2000个文件,以PNG图像与掩码为主(1979个),另含Python脚…

2026/10/1 21:04:48 阅读更多 →
W5500长连接掉线?深入解析TCP Keep-Alive与断线重连实战方案

W5500长连接掉线?深入解析TCP Keep-Alive与断线重连实战方案

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

2026/10/1 20:23:42 阅读更多 →
中科蓝讯RISC-V开发环境搭建:CodeBlocks与RV32工具链配置指南

中科蓝讯RISC-V开发环境搭建:CodeBlocks与RV32工具链配置指南

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

2026/9/30 8:43:21 阅读更多 →

最新新闻

ThingsBoard Edge Ubuntu 升级指南:基于 .deb 包的升级流程与实现原理

ThingsBoard Edge Ubuntu 升级指南:基于 .deb 包的升级流程与实现原理

物联网后端数据可视化消息队列 【免费下载链接】thingsboard All-in-one IoT Platform - Device management, data collection, processing and visualization. 项目地址: https://gitcode.com/GitHub_Trending/th/thingsboard 点击查看 免费下载 本篇技术指南围绕…

2026/10/1 21:04:06 阅读更多 →
Qt5.12 + MSVC2017 环境搭建:我重装了三次才顺,这 8 个坑你不用再踩

Qt5.12 + MSVC2017 环境搭建:我重装了三次才顺,这 8 个坑你不用再踩

插件化那 20 天写的是"程序内部怎么长"。这个专栏换个角度——从一堆源码到一个能交给别人用的安装包,中间那些把人卡住的事。 开篇先解决最前面的一步:环境。去年我接手一个老项目,硬性要求 Qt 5.12.11 MSVC2017。照着网上的教程…

2026/10/1 21:04:06 阅读更多 →
AMD 82 亿美元买下李飞飞的世界模型:当 Agent 开始操作物理世界,安全的游戏规则变了

AMD 82 亿美元买下李飞飞的世界模型:当 Agent 开始操作物理世界,安全的游戏规则变了

9 月 28 日,AMD 官宣了一笔让不少人意外的收购:以约 82 亿美元(约合人民币 550 亿元)全股票收购 World Labs——由「AI 教母」李飞飞 2024 年联合创办、专注空间智能与世界模型的研究实验室。交易预计年底前完成,李飞飞…

2026/10/1 21:04:06 阅读更多 →
咱们散户的心里话

咱们散户的心里话

咱们散户的心里话: 我想给你们更好的生活。 我想换掉那辆开了多年的旧车,想在周末带你们去更远的地方看海,想让孩子用上更优质的教育资源,想让家里的餐桌出现更多样、更健康的食材。 这些念头并非虚荣,而是我作为家庭支…

2026/10/1 21:04:06 阅读更多 →
HEU KMS Activator 新版全面解析全新界面设计与核心功能详解:智能激活、TSForge 离线授权

HEU KMS Activator 新版全面解析全新界面设计与核心功能详解:智能激活、TSForge 离线授权

HEU KMS Activator 迎来了全新版本,此次更新最大的亮点在于界面设计的全面革新。新版采用了更为直观简洁的 UI 风格,不仅让整体视觉效果焕然一新,更重要的是大幅降低了操作复杂度,即便是初次接触的用户也能快速上手。 本文将逐一解…

2026/10/1 21:04:06 阅读更多 →
晋中榆次正规团队与线上中介在合规拉新执行模式上的差异对比

晋中榆次正规团队与线上中介在合规拉新执行模式上的差异对比

晋中榆次地区APP合规拉新:线上中介与本地团队的执行模式差异解析在寻找晋中榆次地区靠谱的APP合规拉新推广团队推荐资源时,许多项目方往往面临选择困境:是选择覆盖面广的线上流量中介,还是深耕区域的本地实体团队?事实…

2026/10/1 21:03:05 阅读更多 →

日新闻

我发现了一个新思路:用 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/1 0:00:30 阅读更多 →
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/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练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/1 1:01:17 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/1 19:40:48 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/1 19:41:40 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/10/1 20:05:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/1 0:00:30 阅读更多 →
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/1 0:00:30 阅读更多 →
黑夜航拍船只数据集训练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/1 1:01:17 阅读更多 →