我靠 RSS 追十几个独立博客和小众软件站的更新,以前用浏览器书签,一周不看就积压到找不回来;公共阅读服务一个接一个关停之后,我索性自己跑一个。CommaFeed 是我试过几款之后留下来的那个:一个 exe,双击就有网页界面,数据躺在自己硬盘上。
单文件是真的,轻量是假的
我在 Windows 上跑了它的 7.4.1 原生包,就是一个 178MB 的独立可执行文件。实测下来:
- 全新环境冷启动,3.85 秒开始监听端口,首页返回 200 是 4.02 秒
- 带着已有数据库二次启动,2.85 秒
- 空闲状态工作集 137MB、私有内存 190MB、50 个线程
- 订阅三个中文源、库里存了 30 条文章之后,工作集涨到 150MB,线程 57 个
- 整个数据库文件 232KB
宣传里「启动快、内存低」只兑现了前半句。启动确实利索,比等容器拉起舒服;但 137MB 的空闲占用不算小,塞在 1GB 内存的小机器上要和别的服务抢地方。只给自己订阅几十个源完全够用,别指望它像静态页面那样几乎不占资源。
部署:一个 exe,但它不一定在 8080
下载对应系统和数据库的包,Windows 上就是单文件,双击或者命令行启动,浏览器访问本机对应端口。这里有个容易卡住的地方:实测监听的端口是 8082,不是大家习惯的 8080,第一次打开空白页先换个端口试。
另一个坑更隐蔽——数据目录是跟着启动时的工作目录走的。我在一个目录里跑起来,订阅了一堆源,换个目录再启动,界面干干净净,像全丢了。其实旧的 db.mv.db 还躺在原来那个 data 目录里。要么固定一个工作目录,要么每次从同一个位置启动。
第一次进后台,有两道门
新装好的实例没有现成的管理员账号。页面上注册能走通,但想用脚本拉起环境,得先调一次初始化接口:
curl -X POST http://localhost:8082/rest/user/initialSetup \
-H "Content-Type: application/json" \
-d '{"name":"tester","password":"你的密码","email":"[email protected]"}'
我一开始按老习惯去 POST /rest/user/login,返回 404。它的登录压根不在 REST 里,而是表单提交到 /j_security_check,成功之后拿到一个叫 quarkus-credential 的凭证。登录前后差别很直接:没登录访问 /rest/category/get 直接 401。所以「它有 REST API」这句话要打个折,业务接口是 REST,认证还停在表单年代,想接自动化得手动带 cookie。
订阅接口会给人假象
用 GET /rest/feed/subscribe?url=... 添加源,返回的是 307 跳转、响应体空的。我第一反应是没成功,其实订阅早就建好了,抓取也在后台跑完了。想确认结果别盯返回值,去查 /rest/category/get?includeFeeds=true,那里能看到每个源的名称、未读数、上次刷新时间。我这三个源各落了 10 条,之后手动全量刷新返回的是「没有新条目」的提示,不是出错。
我为什么还是留下了它
四种布局、明暗主题、OPML 导入导出、25 种以上语言,这些是基本功,别的阅读器也有。真正让我留下来的是两点:一是它同时兼容 Google Reader 和 Fever 两套老接口,手机上那些老牌客户端可以直接连过来,不用换 App;二是数据库能换,个人用内嵌的 H2 省事,人多了换 PostgreSQL,不用推倒重来。
配图是项目在 GitHub 上的卡片。界面还是 Google Reader 那套左边目录、右边列表的三栏结构,上手没有学习成本。
如果你也想给自己攒一个不被平台开关影响的信息入口,这东西值得花十分钟试一下;但要给一屋子人共用,先准备好 PostgreSQL,外加至少 512MB 空闲内存。
你们现在还用 RSS 吗?自建的跑在什么机器上?