No.2511 代码遐想

无图,可能是25年最烂尾的一期……

开源

说说 paho.mqtt.c 代码看后的想法

eclipse-paho/paho.mqtt.c 算是IBM出品,应该是精品了吧。

说说自己看了之后的一些感觉和想法:

  • 提供了两套接口,异步和同步,异步接口会创建两个线程,一个写、一个读,MQTT相关的发送函数会通过队列把数据放入写线程的队列,写线程会从队列中取出数据,然后发送出去,读线程会从队列中取出数据,然后调用相关的回调函数。同步接口则同步处理数据的收发,但是却会创建一个Run线程处理订阅的回调。很显然,在库里面显示创建线程,对于外部使用者来说,这是需要特别注意的。尤其是创建的线程还是Detached的,这样外部使用者就无法控制线程的销毁了(实际提供了销毁整个客户端的接口)。
  • 代码很多函数在处理不同MQTT协议版本的时候,使用两个函数来处理不同的版本,函数名后面加上了版本号。比如MQTTClient_publish 和 MQTTClient_publish5。多少让代码看起来有点凌乱的感觉。难道是C语言就没法做面向对象设计了么?
  • 宏定义满天飞,函数的实现都比较长,而且分支也很深,代码看起来维护很难。好在单元测试算是比较完整的。感觉像是典型的大教堂模式下产生的代码,不太像是一个开源项目。看来有时候不能迷信大厂,不过确实目前看下来,这是最靠谱的C语言的MQTT客户端实现了。
  • 如果考虑在C++里面使用的话,个人觉得需要单独有一层Adaptor层,未来感觉会有更优雅的开源实现出现。事实上boost 的MQTT实现,在MQTTv5上已经基本可用了boostorg/mqtt5