zoukankan      html  css  js  c++  java
  • MQTT开发小记(一)

    最近在协助公司硬件组进行MQTT协议的嵌入式SDK包开发。

    简述一下MQTT

    MQTT简单的来说是一种订阅/发布模式的通信形式,一般分为客户端和服务器端。

    MQTT服务器端可以简单理解为一个消息中转站,也可称作“消息中间件”。

    MQTT是在TCP层面上封装出的一种消息协议,所以如果从网络底层看,依然是现需要建立基本的TCP连接,然后在进行MQTT的连接、消息传递等。

    常规的通信形式是这样的:

    1、客户端通过MQTT协议与服务器进行连接

    2、客户端告知服务端,自己需要监听(订阅)何种消息来源(主题)的信息

    3、服务器收到客户端的订阅,进行记录

    4、如果客户端需要主动告诉服务端一些信息,则发送自定义的指定主题,与相对应的消息告知服务器,服务器端的处理逻辑再进行相应处理

    5、服务端如果想给客户端发送消息,则向客户端订阅的主题发送相应的信息

    由如上可知,MQTT的服务端可以实现,一次发送,告知多个订阅相同主题的客户端。即常见的手机信息推送。

    手机推送可以理解为,某个APP向服务端订阅了指定“主题”,服务端需要告知所有客户端消息时候,只需要发送相应主题的信息即可。

    非常的类似组播。

    如果想实现两个客户端的相互通信,也可以使用MQTT,这是MQTT服务端类似与一个消息转发器,接收两边的信息,并按照指定逻辑相互传递。

    由于存在MQTT服务器这个消息中间商,所以在一般的网络通信中,只要保证MQTT服务器的稳定在线,就可以保证所有客户端之间的通信或者消息的推送。

    所以,在实际的物联网工程中,存在很多利用GPRS传输的设备或者恶劣的网络条件,如果采用实时双工通信的方式,很可能会遗漏实时数据。

    如果采用了MQTT,设备即可在网络恢复的情况下,补发历时实时数据,由MQTT服务器进行储存,并在网络良好的情况下传递个下一个需要该数据的客户端。

    以上是对MQTT的粗浅理解。

    附上这几天的坑:

    1、MQTT的客户端发送的publish数据包如果存在“0000”,服务端会拒绝数据并且主动关闭连接

    2、MQTT的服务器不能同时接到同一客户端的两次连接请求,否则会在连接第二次的时候主动关闭连接

    3、千万不要给板子的GPRS等装置设置两次MQTT服务端的IP端口,否则会出现坑2的情况,并会造成publish的数据包严重错误

    4、善用wireshark,能帮你快速从tcp层面找到问题的所在

    以上

    转自:http://www.xjdsz.net/archives/28.html

  • 相关阅读:
    【转】常用插件的使用—grunt入门指南(上)
    基于Cordova的android项目入门
    【转】隐藏元素的子元素隐藏无效
    【转】IE7以下绝对定位被某元素遮挡
    关于“No projects are found to import”的解决方法
    【转】IE6中a标签触发图片和ajax请求被abort
    JS小笔记
    mysql删除重复数据
    国内优秀的团队技术博客
    mysql中的union和order by、limit
  • 原文地址:https://www.cnblogs.com/tilv37/p/5958221.html
Copyright © 2011-2022 走看看