我的第一个开源工具 inkrss

Share

inkrss是什么

inkrss是一个开源的工具,借助cloudflare免费的服务,实现了对RSS信息的主动获取

为什么做这个

有这个想法是在Telegram看到一些机器人,例如flowerss-bot。 学生阶段没有付费能力,我部署的许多服务都使用了CloudFlare Workers(一种Serverless服务),所以当cloudflare推出Cron Triggers(定时触发能力)与Workers KV(数据存储能力)时,就想到了开发这样一个服务。

有些小难点

  1. Workers KV限制每天写次数为1000,对比运行在Node上的程序,无服务器函数无法维护状态,强依赖数据存储。
  2. Workers限制单次运行http请求的次数,请求订阅源的次数受限。
  3. Workers限制单次CPU运行时间为10ms,无法做复杂的解析,如解析RSS订阅源XML格式的数据。

方案

流程上,用户输入RSS源的地址进行订阅,数据库中维护这样一个订阅源的数组。定时服务每分钟去查看订阅源是否更新,如果更新则通知给用户。

随机访问

用户可能订阅几十个信息源,但受限于单次网络请求次数,无法一次完成全部访问。而且无法将上次请求了哪些记录在数据库中,因为这样会超过KV的写次数。随机访问保证了每一个信息源都可以被访问到,代价是完成一次循环的周期变长。

更新判断

判断分为两步,第一步是看数据是否有变化,第二步看变化了哪里,找出更新的标题、url等信息。

rss信息源为xml格式的数据,一次运行需要查看许多订阅源,如果使用xml2json这样的库转成对象易于后续判断,但耗时太长,免费额度下的10ms完全不够用。

最终使用了简单的正则,匹配出列表的第一个标题,以此为标识判断是否更新。

各种兼容

基于xml,RSS有有RSS2.0、atom等不同规范,不同的格式需要做对应的处理。

标题匹配时发现有如下多种不同的格式,也需要做兼容

<title>example title</title>
<title type="html">example title</title>
<title><![CDATA[ example title ]]></title>

订阅和通知

开发了前端页面用于订阅信息源,同时也可使用telegram bot订阅。

判断更新后即可将最新的标题通知到用户,基于个人使用场景,支持了Telegram Bot、Bark、微信三种通知方式。

网页

感受

这是我第一个公开发布的项目,很幸运有用户使用、反馈、贡献代码。回头看是是个代码质量很低,还挺折腾的事情,仍然有许多没有考虑到的场景。

现在的我应该不会考虑使用免费的云函数去做服务。但当时还是充满热情,思考解决问题的办法。记得第一天发布得到50 Star还蛮开心的,怀念时间自由的大学时光,希望热情可以延续。

Read more

WASM初探

前言 最近开发上线了xhair.pro, 其核心的数据是通过爬虫下载.dem文件并使用一些开源的解析库如demoinfocs-golang,demoparser解析获取最终的数据 在本地下载解析上传可以随意配置环境,但浏览器无法直接运行Golang或Rust的代码。想要将解析的能力制作成web应用,需要使用WebAssembly技术。 WASM WebAssembly 是一种新的编码方式,可以在现代的 Web 浏览器中运行——它是一种低级的类汇编语言,具有紧凑的二进制格式,可以接近原生的性能运行,并为诸如 C/C++、C# 和 Rust 等语言提供编译目标,以便它们可以在 Web 上运行。它也被设计为可以与 JavaScript 共存,允许两者一起工作。 我们可以把Rust、Go等语言编译成.wasm后缀的二进制文件,浏览器可以通过WebAssembly的API加载该模块,并调用相关能力 实践 不同编程语言需要通过不同的方式编译至wasm,我尝试了Go与Rust。 Golang实践 1. 首先需要配置Go的环境 go 安装 2. 初始化项目 mkdir w

By pureink

家用服务器公网访问方案

前言 因为ipv4地址数量受限,家庭宽带几乎都没有公网IP。在局域网内可以使用类似192.168.0.100这样的内网IP进行访问,但是想要在外访问或是提供给朋友使用是不行的。 方案一:内网穿透 可以使用具备公网IP的服务器进行中转,用户访问具备公网IP的服务器,该公网服务器再与家庭服务器通信,最终用户访问到家庭内网。 方案对比 方案 价格 优缺点 使用免费服务如ngrok、cloudflare tunnel 无 速度受限,部分功能需要收费如绑定域名 购买云服务器搭建 中 价格高,需要部署维护 购买FRP服务如sakura frp 低 有流量和带宽限制 个人建议 临时需求可以使用ngrok,例如给朋友看正在开发的网站 长期需求建议购买FRP服务,服务器安装frp软件后,可以通过网页配置隧道如下图,可以使用香港的服务器省去域名的备案,但不太适合云盘等大流量应用。 方案二:DDNS 内网穿透需要付费,并且有带宽和流量限制,额外的一个中转服务器也会影响访问速度。 好在ipv6已经逐渐普及,若服务端和客户端同时支持ipv6网络,

By pureink