阿里云/aliyun的IoT套件中MQTT协议的使用(二)

嘎子 单片机 2017-12-31 3,620 次浏览 , , 1条评论

很早之前写过一篇文章,阿里云IoT套件中MQTT协议的使用,现在看了一下觉得还是挺坑的,说白了什么都没写。我本来是一个比较懒的人,也没有什么心情来更新这个文章,但今天遇到了一个事,让我还是挺不爽的。最近一个淘宝上的买家买了我的代码,要用这个来连阿里云,然后各种问我,我就到网上再查了一下,别说,这次还真成功了,赶快分享一下自己的想法。

首先,觉得官方现在也出了一个TCP连接的帮助:基于TCP连接_设备基于MQTT接入_设备端接入手册_阿里云物联网套件-阿里云,这篇文章算是一个解读吧,对其中说的不明白的地方加以说明。最后会总结一下,总结的对不对大家多多担待。我使用MQTT.fx来当作客户端来使用阿里云的服务。

一、MQTT连接说明

下面是阿里云给的解释,里面有几点我说明一下:

事先说明一下,为了方便说明,我参照了MQTT.fx上的命名给各项要素命名。

1.1 MQTT中的Client ID

Client ID的命名用的是“随意+不随意”的方式。其中“随意”指的是你先可以先想个名字,然后在使用阿里云的时候要再加一个小尾巴。比方说我自己起个名字叫TsonClient,那么到阿里云里面就变成了TsonClient|securemode=3,signmethod=hmacsha1,timestamp=789|这么一个长名字了。后面那一段官网说可以任意起,但实际是,任意起的话我是没有成功过,但timestamp之后的那个数字可以随意,不过官方推荐是和时间相关的东东。

1.2 UserName

这还算比较简单的,教程说的也比较明白,就是deviceName和productKey之间使用一个&符号连接,没有什么好说的。

1.3 最关键的Password

这一点我也试了好几次才明白,这个Password是一个加密后的结果,加密的话有涉及到3方面内容:加密方法,加密前字符串和密钥。

在设置Client ID时加密方法说好了,是hmacsha1,这是一种公开的加密方法,网上可以找到相关提供在线服务的网页,例如:在线加密解密 - chahuo.com。后面我也会找找能不能找到相关C语言的方法,分享给大家。

第二点加密前字符串是相当复杂了,我是一个C#的程序员,用C#的方式给大家简化一下:

String.Format("clientId{0}deviceName{1}productKey{2}timestamp{3}", clientID, deviceName, productKey, timestamp);

是不是觉得越来越复杂了,其实就是将clientId{0}deviceName{1}productKey{2}timestamp{3}中的{0}{1}{2}{3}换成相应的内容就行。其中3要与前面Client ID当时写的相同。

密钥也是相对比较简单的,就是deviceScrete,可以在设备证书中找到。

1.4 Broker Address和Broker Port

这两个最说的最明白:

华东2节点:${productKey}.iot-as-mqtt.cn-shanghai.aliyuncs.com:1883

美西节点:${productKey}.iot-as-mqtt.us-west-1.aliyuncs.com:1883

新加坡节点:${productKey}.iot-as-mqtt.ap-southeast-1.aliyuncs.com:1883

这样,大家就可以连接上服务器了,是不是很简单呢?

呵呵,我承认了,做的过于复杂了。

二、阿里云的好坏

2.1 安全问题

安全问题自己没有发言权,但是看阿里云的服务器各种加密的,感觉安全应该会更强一些吧。应该如此吧。

2.2 方便问题

真心觉得阿里云不方便,各种不好用。当然,现在他的sdk更丰富一些了,但还是觉得不方便。

连接问题前面说了,有多不方便大家也有目共睹,还有一个问题大家不知注意过没有,下面是阿里云教程的开始的时候说的:

第一点很正常,但第二点!!!也就是说一个设备最好只连一个客户端,这说明什么问题?不知道大家有没有注意到过,阿里云的主题是和设备相关的,也就是说不同的设备无法发布或订阅相同的主题!!!也就说明。。。。不同的设备不能相互通信????!!!!不知是不是我的理解有误,但这也太不方便了吧?

2.3 业务逻辑问题

上面说的不方便的,其实就是业务逻辑的一部分,真心感觉一般。反而看看百度云的业务逻辑,感觉挺不错的。

三、说在最后

最后其实也没有什么可说的,前面都总结过了。但最后还是吐槽一下,阿里云可能会有很多很不错的特征,但是从起步开始的就把一个简单的协议搞的这么复杂,挡住了不少人进入的脚步(特别是一些小公司,小程序员),这应该算一个策略失误吧。

也可能马云爸爸并不在乎小公司、小程序员呢?但没有小公司、小程序员,阿里还是阿里吗?

 

原创文章,文章首发于:Riley Ge (@rileyge) — Steemit

原创文章,转载请注明: 转载自TsonTec:测量解决方案提供者

本文链接地址: 阿里云/aliyun的IoT套件中MQTT协议的使用(二)

相关主题

说点什么

1 评论 在 "阿里云/aliyun的IoT套件中MQTT协议的使用(二)"

提醒
avatar
排序:   最新 | 最旧 | 得票最多
nikoladi
游客
nikoladi

第一点很正常,但第二点!!!也就是说一个设备最好只连一个客户端,这说明什么问题?不知道大家有没有注意到过,阿里云的主题是和设备相关的,也就是说不同的设备无法发布或订阅相同的主题!!!也就说明。。。。不同的设备不能相互通信????!!!!不知是不是我的理解有误,但这也太不方便了吧?

站长理解错了吧
这里设备名字是产品下的名称,保证一个产品下设备名的唯一性。这上面应该说的是单点登陆的问题,如果有设备名相同的多个设备同时登陆(可能是被抄板了,山寨),会竞争上线。

可以看这个链接
https://help.aliyun.com/document_detail/42649.html?spm=a2c4g.11186623.6.583.buYnRP

另外多谢站长写这么多优秀的文章。

回顶部