作者希望其在 PythonAnywhere 上的 Python 爬虫能够与其运行 Termux 的手机通信。由于维护成本、费用或技术限制(例如手机位于 NAT 之后),标准解决方案如 Firebase、Ngrok 或配置带有 Redis 的 VPS 并不适用。核心问题在于:云端脚本可以推送数据,但手机在没有暴露端口或中间代理的情况下难以接收这些推送。
为此,作者反转了该模型:手机现在从中央服务器拉取信息,而非由云端向手机推送。该“意图总线”(Intent Bus)利用一个轻量级 Flask 服务器作为代理。云端脚本向该服务器发布任务,这些任务被称为“意图”(intents)。
运行在手机或电脑等设备上的工作脚本(Worker scripts)会轮询该服务器,查找与其定义目标匹配的任务。一旦工作脚本认领了任务,该任务将以原子方式处理,并报告其完成情况。可见性超时机制确保若工作脚本在执行过程中崩溃,任务将自动重新入队。
部署过程被描述为简单的三步:首先,将 Flask 服务器分叉并部署到 PythonAnywhere,仅需设置一个环境变量;其次,在手机上通过 Termux 启动工作脚本,方法是保存 API 密钥并运行一个 Bash 脚本;最后,可通过向意图总线服务器发送 POST 请求,从任何位置触发任务。
该系统支持多种用例,包括从云端脚本发送手机通知、聚合多台机器的日志、将警报转发至 Discord 等服务,以及在无需开放端口的情况下触发防火墙后的设备(如树莓派)上的操作。此外,还提供 Python SDK 以简化集成。
然而,意图总线并非为高频工作负载设计,受限于 SQLite,不保证恰好一次交付(仅提供至少一次交付),不支持多区域部署,也不是 Firebase 等服务的直接替代品。它旨在用于更简单的自动化任务,在这些场景中,更复杂的分布式系统显得过度设计,从而在 cron 任务与更健壮的解决方案之间架起桥梁。作者提供了项目 GitHub 仓库的链接,并展示了一个实时演示实例。
dev.to
How I Coordinate Scripts Across Devices Without Open Ports, Firebase, or a VPS
Create attached notes ...
