17611538698
webmaster@21cto.com

Redis之父用纯C语言代码实现Telegram Bot框架

资讯 0 1021 2023-11-28 07:54:03

图片

话说,Redis 创始人 antirez 最近开源了一个小项目 BOTLIB。这是用纯 C 语言代码编写的 Telegram Bot 框架 。

下面是它的GitHub仓库:

图片

GitHub 地址:https://github.com/antirez/botlib
从名字就能知道它的用途,BOTLIB 用于创建 Telegram 对话机器人。

整个代码结构如下:

  • 基础数据结构


全局变量 struct chatState *Chat用来存储所有的状态信息;

struct client *clients[MAX_CLIENTS]数组,用来存储所有客户端的fd以及用户昵称。

图片

  • 代码流程

1.initChat初始化全局变量,同时创建服务端监听fd保存到全局变量Chat->serversock中

2.开始while死循环
3.先初始化fd_set集合
4.将监听fd和客户端fd放入到fd_set集合中
5.调用系统函数select对fd_set集合进行事件监测,同时将监测到结果保存到fd_set中
6.最后在分别对监听fd和客户端fd在结果fd_set中是否有事件进行判断

7.分别进行对应的业务处理


图片

代码结构很清晰,很适合初学C语言的同学拿来练手网络编程。

后续代码还会增加对称加密/更高级的网络模型等等,可以持续关注学习。整个的网络IO的处理和Redis源码关于网络IO的处理有很多的相似之处。

从 antirez 创建的另一个仓库 (https://github.com/antirez/failed-3d-prints-bot) 可知,他用了一台带网络摄像头的树莓派来监控 3D 打印机,并在检测到打印失败时通过 Telegram 接收该状态消息。
为了通过 Telegram 接收信息,他编写了一个 Telegram Bot 框架来创建 Telegram 机器人,他所创建的这个机器人用途是检测打印机的失败状态,并传回一张该状态对应的 3D 打印机实时图像。
此前,Redis 创始人还用 C 语言编写最小聊天服务器:Smallchat。Smallchat 的核心代码仅 300 多行。antirez 称删除空行和注释后其实只有 200 多行。
作者:万能的大雄

评论