历经重重坎坷,我们已经完成了连接报文、心跳报文以及订阅报文和取消订阅报文的分析和实战,仅仅还剩下最后一种报文 —— PUBLISH 报文我们还没学习,这也是最复杂的一种报文,我们需要支持 QoS0-QoS2 三种消息服务级别。这篇文章我们就来看看 PUBLISH 报文的结构,以及完成 QoS0 级别消息的发送与接收实战。
【数据结构与算法】环形缓冲区:原理,实现,与应用
最开始接触到环形缓冲区(ring buffer)还是在上《数据结构》这门课时,当时对这种数据结构没有多深的认识,这是因为对其在项目中实际应用缺少足够的认识。最近,由于在项目中遇到了类似任务间通信的需求,所以再来研究研究这位“老朋友”。
【计算机网络】mqtt通信协议入门(九)订阅报文实战
经过前面的努力,我们的程序已经能够正常连接服务器,并且可以实现保活功能。接下来我们继续深入学习。这篇文章的主题是 Topic 和订阅与取消订阅,对应 SUBSCRIBE 与 UNSUBSCRIEB 报文,同时还需要接收服务端响应的 SUBACK 和 UNSUBACK 报文,这些报文的结构在上一篇文章已经介绍了,本文我们研究一下如何实现。
【计算机网络】mqtt通信协议入门(八)订阅报文
这篇文章来分析一下 SUBSCRIBE 相关报文,客户端向服务端发送 SUBSCRIBE 报文用于创建一个或多个订阅。每个订阅注册客户端关心的一个或多个 主题。为了将应用消息转发给与那些订阅匹配的主题,服务端发送 PUBLISH 报文给客户端。SUBSCRIBE 报文也(为每个订阅)指定了最大的 QoS 等级,服务端根据这个发送应用消息给客户端。
【计算机网络】mqtt通信协议入门(七)异步等待的原理与实现
在实现服务器连接函数时,有提到同步和异步等待 ack 的方法,因为在连接没建立起来之前,我们无其他事情可做,所以在等待 CONNACK 时,采取了同步等待的策略。但是对于 PINGRESP 报文的等待,还可以使用同步的方式吗?哪种方式更好呢?这篇文章我们就来看一下吧。
【计算机网络】mqtt 通信协议入门(六)连接服务器实战-调试运行与 tcpdump 抓包分析
前面的文章中已经为 ”连接服务器“ 这一任务做好了足够的铺垫,这篇文章,我们在之前的基础上会构建一个简单的测试程序 和 Makefile 文件来编译程序,并让它成功运行起来。最后,为了验证我们的程序是不是真正的完成了要求的功能,我们还会使用 tcpdump 进行抓包验证。在这个过程中,代码出现 bug 时,我们使用 gdb 来进行调试和解决。下面让我们开始吧!
【计算机网络】mqtt 通信协议入门(五)连接服务器实战-协议层实现
这篇文章介绍了”连接服务器实战“中协议层的实现,该层实现 mqtt 协议规定报文的收发,主要调用了我们前面已经实现的系统层和序列化反序列化层的接口。
【计算机网络】mqtt 通信协议入门(四)连接服务器实战-底层实现
上一篇 mqtt 协议的文章介绍了项目的整体架构,这篇文章计划将所有的接口都实现,并且能够成功连接服务器端。我会仍然按照自底向上的顺序介绍,下面先回顾一下我们的整体架构:
【计算机网络】mqtt 通信协议入门(三)连接服务器实战-设计
在接触一些新概念、新技术时,不仅仅要学习其理论,也要结合实践来加深印象。之前的文章详细介绍了连接的建立与保持相关报文,这篇文章就在上一篇文章的基础上,实现一个能够进行连接建立和保持的简易 mqtt 客户端,随着学习的深入,我们也会一点一点完善它。
【计算机网络】mqtt 通信协议入门(二)连接控制报文
之前的文章介绍了 mqtt 控制报文的基本结构,后面的文章会接着之前的主题,继续详细介绍各类控制报文的具体内容。本篇文章介绍了连接建立与保持相关的控制报文结构,包括 CONNECT、CONNACK、DISCONNECT、PINGREQ 和 PINGRESP 控制报文。