Telegram API

TDLib (Telegram Database Library) 是构建 Telegram 客户端的跨平台开源库,使用 C++ 编写。前一份工作,我们也是编写跨平台的 SDK 供 Android & iOS & MacOS & Windows 调用,采用 Dropbox 开源的 Djinni 来实现与其它语言的桥接,新的需求常常往 IDL 上加接口,容易导致应用层与 SDK 库接口不一致,遇到编译问题。相对来说,TDLib API 做得相当出色,接口简单,新的业务需求不需要改接口,只需定义新的结构数据即可。

Dropbox 因 The (not so) hidden cost of sharing code between iOS and Android 停止了 Djinni 的维护。倒是 Snaptchat 接手了这个项目的维护与改进,见 snaptchat/djinni

TDLib API

如图,用户只要使用 Client 类的三个接口即可,execute 是个静态函数负责同步的调用本地方法,send 发起一个异步请求,receive 负责接收请求对应的结果或者对端的推送消息,只要这几个方法不变,一般来说就不会遇到应用层与 SDK 库接口不一致的问题。

对于请求的方法由请求参数来决定,应从 Function 派生,只要是这个类的派生类都是请求。对应请求的响应和对端的推送从 Object 派生。这样,当有新的需求,要增加新的接口,用户只定义新的结构数据就可以。

TDLib API 基于 Actor 模型 来实现异步机制,Client 的实现是个 Actor,后续将分析 TDLib API 中 Actor 模式 tdactor 的实现。