话说,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 多行。
本文为 @ 场长 创作并授权21CTO发布,未经许可,请勿转载。
内容授权事宜请您联系 webmaster@21cto.com或关注 21CTO 公众号。
该文观点仅代表作者本人,21CTO 平台仅提供信息存储空间服务。