复杂局域网里的 WebRTC 稳定性,重点不只是 WebRTC offer/answer 怎么转发,还包括外围控制链路如何恢复。 这个场景不是 2C 通话,而是更接近医疗、养老等机构里的设备群:大量共享设备长时间在线,集中运维,现场环境可能比较嘈杂,同时还要保证一定收音距离和通话音质。 我遇到的核心问题是:长连接不一定会明确断开,有时会出现“看起来还连着,但应用消息已经不通”的状态。结果是设备页面显示在线,但呼叫事件发不到对端,超时、挂断、多人通话清理都会变得不一致。 这篇文章聚焦几个点: WebSocket 长连接假连接为什么危险 为什么只依赖客户端主动重连不够 gRPC Gateway 如何做双向控制 自动发现和主节点状态表怎么帮助恢复 呼叫超时、自动挂断、一对一挂断、多人挂断如何收敛 嘈杂环境下,音频可观测性为什么也属于稳定性的一部分 我的结论是:这不是简单的 WebSocket 换 gRPC ,而是要补齐发现、状态和恢复闭环。媒体链路仍然走 WebRTC ,Go/gRPC 更适合做控制面和状态收敛。 原文地址: https://www.lodan.me/posts/webrtc-grpc-gateway-discovery-recovery/ 想听听大家在局域网、弱网、设备长时间运行场景里,是怎么处理长连接假在线和通话状态恢复的。
复杂局域网里的 WebRTC 稳定性,重点不只是 WebRTC offer/answer 怎么转发,还包括外围控制链路如何恢复。 这个场景不是 2C 通话,而是更接近医疗、养老等机构里的设备群:大量共享设备长时间在线,集中运维,现场环境可能比较嘈杂,同时还要保证一定收音距离和通话音质。 我遇到的核心问题是:长连接不一定会明确断开,有时会出现“看起来还连着,但应用消息已经不通”的状态。结果是设备页面显示在线,但呼叫事件发不到对端,超时、挂断、多人通话清理都会变得不一致。 这篇文章聚焦几个点: WebSocket 长连接假连接为什么危险 为什么只依赖客户端主动重连不够 gRPC Gateway 如何做双向控制 自动发现和主节点状态表怎么帮助恢复 呼叫超时、自动挂断、一对一挂断、多人挂断如何收敛 嘈杂环境下,音频可观测性为什么也属于稳定性的一部分 我的结论是:这不是简单的 WebSocket 换 gRPC ,而是要补齐发现、状态和恢复闭环。媒体链路仍然走 WebRTC ,Go/gRPC 更适合做控制面和状态收敛。 原文地址: https://www.lodan.me/posts/webrtc-grpc-gateway-discovery-recovery/ 想听听大家在局域网、弱网、设备长时间运行场景里,是怎么处理长连接假在线和通话状态恢复的。
复杂局域网里的 WebRTC 稳定性,重点不只是 WebRTC offer/answer 怎么转发,还包括外围控制链路如何恢复。 这个场景不是 2C 通话,而是更接近医疗、养老等机构里的设备群:大量共享设备长时间在线,集中运维,现场环境可能比较嘈杂,同时还要保证一定收音距离和通话音质。 我遇到的核心问题是:长连接不一定会明确断开,有时会出现“看起来还连着,但应用消息已经不通”的状态。结果是设备页面显示在线,但呼叫事件发不到对端,超时、挂断、多人通话清理都会变得不一致。 这篇文章聚焦几个点: WebSocket 长连接假连接为什么危险 为什么只依赖客户端主动重连不够 gRPC Gateway 如何做双向控制 自动发现和主节点状态表怎么帮助恢复 呼叫超时、自动挂断、一对一挂断、多人挂断如何收敛 嘈杂环境下,音频可观测性为什么也属于稳定性的一部分 我的结论是:这不是简单的 WebSocket 换 gRPC ,而是要补齐发现、状态和恢复闭环。媒体链路仍然走 WebRTC ,Go/gRPC 更适合做控制面和状态收敛。 原文地址: https://www.lodan.me/posts/webrtc-grpc-gateway-discovery-recovery/ 想听听大家在局域网、弱网、设备长时间运行场景里,是怎么处理长连接假在线和通话状态恢复的。
最近把一篇旧的 Android WebRTC + Go gRPC 对接记录重新整理成了脱敏后的工程复盘。 文章地址: https://www.lodan.me/zh-cn/posts/golang-grpc-webrtc-android/ 这次重点不是讲某个 API 怎么调,而是把边界拆清楚: - Go/gRPC 信令层负责设备注册、会话控制、回调事件和 SDP/ICE 转发。 - Android 客户端负责权限、页面生命周期、本地音视频资源和 UI 状态同步。 - WebRTC PeerConnection 负责 offer/answer 、ICE candidate 、track add/remove 和连接状态。 - 排查问题时,日志至少要能串起 call id 、peer id 、signaling state 、ICE state 和 selected candidate pair 。 我现在的判断是:如果这些边界混在一起,线上问题很容易变成“看起来像网络问题”“看起来像设备问题”“看起来像 SDK 问题”。边界清楚以后,排查路径会直接很多。 想讨论一下:大家做 Android WebRTC 或 RTC Gateway 时,通常会把多少信令/状态逻辑放在客户端,多少放在本地网关或服务端?
今天刚开源了一个实验性项目:ASys ( Agentic System Interface ),一个专门为 AI Agent 设计的二进制系统接口协议。 几个主要设计决策: . APDU 二进制帧(借鉴 ISO 7816 标准,smartcard 领域用了几十年)——零解析开销,指令级分发,但比文本协议难调试 . Noise IK 替代 mTLS——无证书,1-RTT 双向认证,但没有 PKI 生态 . Capability Map (每条指令单独授权)——限制 Agent 出错的爆炸半径,但需要手动注册 key . 静态内存池,请求路径零 malloc——OOM 下仍可运行,代价是单 daemon 上限 8 个并发 session 相比 SSH 或 Ansible ,ASys 是另一个选项:当操作者是 AI Agent 时,从头设计一个专门为它服务的接口。 目前实现了: . asyd:C 写的 daemon ,零外部依赖,systemd 部署 . Core ISA:SYS_CAPS / SYS_HELLO / SYS_STATUS / SYS_PROCS . Standard ISA:PROC_THROTTLE ( SIGSTOP/SIGCONT )、SVC_RESTART (异步,Task_Handle 轮询) . Python SDK ( client ),支持从 Windows 连接 RHEL 节点 . 多 Agent 并发 session 隔离验证 文档: . Whitepaper:设计背景和 rationale . Protocol Spec:完整 ISA 、帧格式、安全模型 . Design Notes:21 条 ADR ,每个"为什么不用 XX 方案"都有记录 GitHub: https://github.com/vincentping/asys 欢迎拍砖。
最近把一篇 WebRTC + gRPC 音视频通话方案做了脱敏整理,主要讨论复杂局域网/受限网络里,Android 终端之间做实时音视频时,信令、媒体链路和自恢复能力应该怎么拆。 这篇不是完整生产配置,而是一个架构复盘。重点是几个边界: - gRPC 信令层负责设备状态、会话控制和事件分发。 - WebRTC 负责 SDP/ICE 、track 和媒体传输。 - Android 客户端负责权限、采集、播放、UI 状态和资源释放。 - RTC Gateway 需要承担自动发现、状态同步、故障恢复和观测入口。 - 音频质量、弱网恢复、设备重启、会话残留这些问题不能只靠业务层 timeout 判断。 文章地址: https://www.lodan.me/posts/webrtc-grpc-lan-call-architecture/ 想请教大家:在局域网或受限网络里做 WebRTC 时,你们更倾向把信令网关做成独立服务,还是内置到客户端/边缘节点?故障恢复通常靠 WebSocket 重连、gRPC stream ,还是自定义心跳/发现机制?
最近把一篇 WebRTC + gRPC 音视频通话方案做了脱敏整理,主要讨论复杂局域网/受限网络里,Android 终端之间做实时音视频时,信令、媒体链路和自恢复能力应该怎么拆。 这篇不是完整生产配置,而是一个架构复盘。重点是几个边界: - gRPC 信令层负责设备状态、会话控制和事件分发。 - WebRTC 负责 SDP/ICE 、track 和媒体传输。 - Android 客户端负责权限、采集、播放、UI 状态和资源释放。 - RTC Gateway 需要承担自动发现、状态同步、故障恢复和观测入口。 - 音频质量、弱网恢复、设备重启、会话残留这些问题不能只靠业务层 timeout 判断。 文章地址: https://www.lodan.me/posts/webrtc-grpc-lan-call-architecture/ 想请教大家:在局域网或受限网络里做 WebRTC 时,你们更倾向把信令网关做成独立服务,还是内置到客户端/边缘节点?故障恢复通常靠 WebSocket 重连、gRPC stream ,还是自定义心跳/发现机制?
Tikrok Services — 第八代微服务平台 新网站 tikrok.cc 陆续更新中 基于 gRPC + Gin 的微服务平台,采用 Go 多模块工作区 (go.work) 架构, 通过 gen/ 接口隔离层 实现 RPC 客户端与服务端实现解耦,共 15 个独立模块。 第八代更新了什么 与第七代相比,第八代主要围绕 「内容交付」 补齐了三个关键拼图: 1. 独立图片处理微服务 从零搭建了 Image Service ( HTTP :9006 + gRPC :9056 ),基于 Go 原生 imaging 库实现生产级图片实时处理。支持裁剪、缩放、格式转换,本地 LRU 磁盘缓存( 7 天 TTL ),信号量限流并发。Nginx 侧做了 proxy_cache 直连路由,图片直接走 nginx 缓存层,不经过 Gateway 。Markdown 内容中的 ref:media_id 引用自动解析为图片 URL——论坛帖子和教程终于能正常显示配图了。 2. TUS 协议大文件分段上传 新增独立 TUS Upload Service ( HTTP :9007 ),支持断点续传、并发分片。前端上传大文件时中断了可以从断点继续,不用重新传。上传完成自动写入媒体资源库并触发 S3 归档。软件版本发布也改为 TUS 上传驱动——上传完成即发布。 3. QUIC 网关合并进 tunnel 服务 之前 QUIC 数据平面是独立的 tikrokd-server ,维护两套部署太痛苦了。第八代将 QUIC 网关完整合并进 tunnel 服务,UDP listener 、HTTP/3 、TLS ALPN 协商( h3/h2/http1.1/tikrok )、流量统计、证书管理( Let's Encrypt 自动签发)、速率限制全部整合在一个进程中。部署少一个组件,监控少一套指标。 配套还补了开发者注册审核流程、管理员升级接口、20+ 个 Swagger API 文档更新、4 个数据库迁移。 第八代的核心思路: 内容上传( TUS )→ 内容存储( S3 + 媒体资源管理)→ 内容消费( Image Service 实时处理 + Nginx 缓存加速) 这条链路终于完整了。
目前,tkrok 第 7 代,实现代码行业达到了 20+ 万行,即将达到个人维护的边界。为方便后续个人远程开发者可以方便地接入项目维护工作,特此将第 6 代实现重构升级。分享给社区,为 golang 微服务兴旺,肋力。也方便后续开发者接手了解生产级的代码实现,为自学的开发者指南。 接口契约优先 · 实现细节隐藏 · 协作零泄露 🎯 核心目标拆解 ✅ 服务提供方:只暴露 IDL + 生成的 Client/Handler 接口,隐藏业务实现 ✅ 服务消费方:仅依赖 RPC 客户端代码,无需拉取服务端源码 ✅ 协作开发:通过契约版本协商变更,避免「改接口改到崩溃」 ✅ 安全管控:私有仓库 + 权限隔离 + 依赖审计,防止源码泄露 💡 本质: 「接口定义仓库」与「业务实现仓库」物理分离 + 自动化代码生成 🏗️ 整体架构设计(参考字节/腾讯实践) 📦 公司 Git 组织 ├── 🔓 idl-registry/ # [公开] 接口定义仓库(只含 IDL + 生成代码) │ ├── user-service/ │ │ ├── user.thrift # 服务契约(唯一真理源) │ │ ├── kitex_gen/ # 自动生成的 Client/Handler/Model │ │ ├── go.mod # module company.com/idl/user-service │ │ └── README.md # 接口变更规范 + 版本日志 │ └── order-service/ │ └── ... │ ├── 🔐 user-service-impl/ # [私有] 服务端实现仓库(仅内部可见) │ ├── handler/ # 业务逻辑实现(实现 idl 定义的 Handler 接口) │ ├── main.go # 服务启动入口 │ ├── go.mod │ │ require company.com/idl/user-service v1.2.0 # 依赖接口仓库 │ └── .gitignore # 禁止提交 handler 业务代码到 idl 仓库 │ ├── 🔐 order-service-impl/ # [私有] 其他服务实现 │ └── ... │ └── 🔐 internal-tools/ # [私有] 代码生成/发布工具链 ├── kitex-gen-wrapper.sh # 封装 kitex 生成命令 └── publish-idl.sh # 自动打标签 + 推送到私有 GOPROXY 🔑 关键原则: idl-registry : 只含接口契约 + 生成代码 ,权限开放给所有开发者 *-impl : 仅含业务实现 ,权限严格管控,禁止外部访问 消费方 go.mod 只依赖 company.com/idl/* , 永远不依赖 *-impl
flash 就很好了,pro 除了慢,暂时没看出优点。 如题 trojan rust grpc ,又快又稳,之前一直用的大佬写的 go 版 ws 协议,5 年了,稍微慢点也很稳,想想不如自己手搓一个。 rust 0 基础,8 小时,花了 5 块不到,又快又稳。 配上年初抢的,很多人看不上 19.9 一年的的搬瓦工,晚点 8 点半,油管 2k60 帧,带宽跑到 120MB 。
flash 就很好了,pro 除了慢,暂时没看出优点。 如题 trojan rust grpc ,又快又稳,之前一直用的大佬写的 go 版 ws 协议,5 年了,稍微慢点也很稳,想想不如自己手搓一个。 rust 0 基础,8 小时,花了 5 块不到,又快又稳。 配上年初抢的,很多人看不上 19.9 一年的的搬瓦工,晚点 8 点半,油管 2k60 帧,带宽跑到 120MB 。
flash 就很好了,pro 除了慢,暂时没看出优点。 如题 trojan rust grpc ,又快又稳,之前一直用的大佬写的 go 版 ws 协议,5 年了,稍微慢点也很稳,想想不如自己手搓一个。 rust 0 基础,8 小时,花了 5 块不到,又快又稳。 配上年初抢的,很多人看不上 19.9 一年的的搬瓦工,晚点 8 点半,油管 2k60 帧,带宽跑到 120MB 。
flash 就很好了,pro 除了慢,暂时没看出优点。 如题 trojan rust grpc ,又快又稳,之前一直用的大佬写的 go 版 ws 协议,5 年了,稍微慢点也很稳,想想不如自己手搓一个。 rust 0 基础,8 小时,花了 5 块不到,又快又稳。 配上年初抢的,很多人看不上 19.9 一年的的搬瓦工,晚点 8 点半,油管 2k60 帧,带宽跑到 120MB 。
flash 就很好了,pro 除了慢,暂时没看出优点。 如题 trojan rust grpc ,又快又稳,之前一直用的大佬写的 go 版 ws 协议,5 年了,稍微慢点也很稳,想想不如自己手搓一个。 rust 0 基础,8 小时,花了 5 块不到,又快又稳。 配上年初抢的,很多人看不上 19.9 一年的的搬瓦工,晚点 8 点半,油管 2k60 帧,带宽跑到 120MB 。
flash 就很好了,pro 除了慢,暂时没看出优点。 如题 trojan rust grpc ,又快又稳,之前一直用的大佬写的 go 版 ws 协议,5 年了,稍微慢点也很稳,想想不如自己手搓一个。 rust 0 基础,8 小时,花了 5 块不到,又快又稳。 配上年初抢的,很多人看不上 19.9 一年的的搬瓦工,晚点 8 点半,油管 2k60 帧,带宽跑到 120MB 。
flash 就很好了,pro 除了慢,暂时没看出优点。 如题 trojan rust grpc ,又快又稳,之前一直用的大佬写的 go 版 ws 协议,5 年了,稍微慢点也很稳,想想不如自己手搓一个。 rust 0 基础,8 小时,花了 5 块不到,又快又稳。 配上年初抢的,很多人看不上 19.9 一年的的搬瓦工,晚点 8 点半,油管 2k60 帧,带宽跑到 120MB 。
flash 就很好了,pro 除了慢,暂时没看出优点。 如题 trojan rust grpc ,又快又稳,之前一直用的大佬写的 go 版 ws 协议,5 年了,稍微慢点也很稳,想想不如自己手搓一个。 rust 0 基础,8 小时,花了 5 块不到,又快又稳。 配上年初抢的,很多人看不上 19.9 一年的的搬瓦工,晚点 8 点半,油管 2k60 帧,带宽跑到 120MB 。
flash 就很好了,pro 除了慢,暂时没看出优点。 如题 trojan rust grpc ,又快又稳,之前一直用的大佬写的 go 版 ws 协议,5 年了,稍微慢点也很稳,想想不如自己手搓一个。 rust 0 基础,8 小时,花了 5 块不到,又快又稳。 配上年初抢的,很多人看不上 19.9 一年的的搬瓦工,晚点 8 点半,油管 2k60 帧,带宽跑到 120MB 。
flash 就很好了,pro 除了慢,暂时没看出优点。 如题 trojan rust grpc ,又快又稳,之前一直用的大佬写的 go 版 ws 协议,5 年了,稍微慢点也很稳,想想不如自己手搓一个。 rust 0 基础,8 小时,花了 5 块不到,又快又稳。 配上年初抢的,很多人看不上 19.9 一年的的搬瓦工,晚点 8 点半,油管 2k60 帧,带宽跑到 120MB 。
flash 就很好了,pro 除了慢,暂时没看出优点。 如题 trojan rust grpc ,又快又稳,之前一直用的大佬写的 go 版 ws 协议,5 年了,稍微慢点也很稳,想想不如自己手搓一个。 rust 0 基础,8 小时,花了 5 块不到,又快又稳。 配上年初抢的,很多人看不上 19.9 一年的的搬瓦工,晚点 8 点半,油管 2k60 帧,带宽跑到 120MB 。