多机多卡党的日常折腾
我手里平时备着好几部手机和多张电话卡。主力机随身揣在兜里,插着副卡的备用机常年扔在家里书桌充电。每次出门在外要收个银行验证码,或者想翻一下某张副卡上个月收到的账单短信,总得远程找家里人帮忙看,或者回家再去翻备用机,实在折腾。
最早我试着走捷径,在 smsforwarder-ntfy 项目里基于开源的 SmsForwarder 二次开发了一个原生 ntfy 发送端。用了一阵子发现,单纯的单向消息推送只能救急,根本没法当正经收件箱用:备用机断网重连后历史双卡收件箱没法自动跟服务端对账,而且我在电脑或主力机上看完了验证码,备用机通知栏还亮着一堆未读红点。
全栈自研「鸿枢」与四天十二连发
既然修修补补解决不了状态同步问题,我在 2026 年 10 月 8 日至 9 日(Commit 57e5e5c、9cad05a)索性从零开写跨设备短信同步平台 「鸿枢(Hongshu)」,并发出 v0.1.0-alpha.1。
整套架构拆得很清楚:后端是用 Go + MySQL 写的核心中枢(默认监听 18473 端口),前端配了随时能在桌面浏览器打开的 React PWA 网页端,手机侧则是用 Kotlin + Jetpack Compose 原生开发的 Android 客户端。
首发之后的头四天里,我一边拿自己的真机实测,一边连发了 12 个 alpha 迭代版本填坑:
- WebSocket 内存 Pub/Sub 实时推送:砍掉了最早每 2 秒轮询一次数据库的笨办法,新短信入库瞬间通过内存订阅分发到所有在线设备。
- 超大异常短信隔离:实测全量同步老手机收件箱时,遇到过大于 900KB 的异常彩信或损坏文本直接卡死事务,后来专门加了自动隔离机制防止数据库死锁。
- 单密码直登与断点全量采集:去掉了繁琐的一次性配对码流程,改成单密码直登;手机端开启同步后会按批次、带断点的把历史收件箱全量搬上中枢。
换上 Material 3 Expressive 与鸿鸟翼形图标
在打磨底层同步队列的同时,我也把客户端和 Web 端的界面重做了一遍。全线换上 Material 3 Expressive 视觉风格,并启用了以“鸿鸟翼形”为灵感的品牌图标(icon2),让这台全天候跑在后台的小工具看着也足够顺眼。