上次说到我要把机器人的架构改改,那么今天(2015年9月1日)我们来把这些说完。

首先这个架构之前是什么样的呢?先看看图吧。 bot_structure_comparision.png 图中左边是旧的架构,右边是新的架构。在使用 Bot API 之前,机器人实际上就是一个挂在 tg-cli 客户端上的回调脚本。由于当时 Telegram 还可以顺畅访问,并且文件传输速度很快,于是我选择直接将整个端部署到树莓派上。

架构变化最主要有两个原因:其一是 Telegram 在经历了上一次大规模 DDoS 攻击之后,在部分地区被屏蔽,文件上传速度也受到非常大的影响;其二是我不喜欢在机器人里采用轮询方式主动查询消息,而是偏好设置 Webhook 地址,然后由 Telegram 服务器主动推送消息到我的机器人上。而 Webhook 方式的请求是 HTTPS 请求,这种条件只有我的 VPS 上能够满足。

在 VPS 上建立基本的机器人是很快的。那么问题来了,位于国外的机器人如何能与树莓派进行交互,甚至读取连接在树莓派上的传感器和摄像头呢?

这里我用了一个很偷懒的方法,直接把机器人和树莓派都作为客户端,连接到我的 VPS 上运行的一个 Mosquitto 实例上,两端都保持长连接,这样就可以通过 MQTT 协议来进行交互了。Mosquitto 是一个 C语言写的 MQTT 服务器,占用资源很少。MQTT 协议是物联网的一种标准协议,是一种订阅 / 发布模型,详细信息参照官网

那么接下来我也没什么好说的了,talk is cheap, I’ll show you the code.

按照图中右边架构编写的机器人和树莓派客户端都放在 GitHub 上:JokerQyou/bot,其中树莓派客户端使用到了我下一篇文章会讲的 pitools