MQTT应用已经非常广泛了,目前笔者团队需要用lua来实现mqtt通讯,而服务端需要使用.Net Core来实现,以下是相关技术研究的一个总结。
本文主要介绍.Net Core和Lua的MQTT通讯示例。所有源代码可以从这里下载。
1. MQTT 协议
开发之前,非常有必要仔细的了解一下MQTT协议的基本介绍和报文结构,可以参考简书用户“技术学习”的MQTT专栏,里面关于协议介绍的非常详细。
2. MQTT Lua
MQTT的lua实现并不是一个常见的需求,http://mqtt.org/上能下到的版本只支持到MQTT协议3.1版本,最新的3.1.1版本并不支持。
3.1.1版本改动不大,但是并不兼容3.1版本。
最后我这边使用的是Github上的个人开发者的一个版本,和3.1版本比较,改变了:
CONNECT消息可变头部协议名称MQIsdp被改为MQTT
CONNECT消息可变头部协议版本号,由0x03变成了0x04
增加了函数wait_for_connack,发送CONNECT消息后必须在设置的时间(3秒)内获取到服务端返回的CONNACK消息才确认链接已经成功。
示例实现MQTT的客户端,只包括3个文件:
mqtt.lua : 封装好的mqtt lua库
utility.lua: mqtt.lua用到的工具相关封装
testmqtt.lua: 我们编写的示例,调用mqtt.lua,以下是部分代码
local args={
host="192.168.1.69",
port=5555,
id="cl