最近在协助公司硬件组进行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

MQTT开发小记(一)的更多相关文章

  1. NodeJS+Express+MySQL开发小记(2):服务器部署

    http://borninsummer.com/2015/06/17/notes-on-developing-nodejs-webapp/ NodeJS+Express+MySQL开发小记(1)里讲过 ...

  2. 使用Surging Mqtt 开发基于WS的MqttClient客户端

    原文:使用Surging Mqtt 开发基于WS的MqttClient客户端 最近一段时间由于要做一套智能设备系统,而有幸了解到Surging中的Mqtt broker,学习了很多东西本篇文章基于Su ...

  3. 带农历日历的DatePicker控件!Xamarin控件开发小记

    原文:带农历日历的DatePicker控件!Xamarin控件开发小记 闲来无事开发了个日期选择控件,感兴趣的同学前往: https://github.com/MatoApps/Mato.DatePi ...

  4. MQTT开发笔记之《MQTT Server》

    MQTT SERVER 性能测试报告 : http://w3yyb.sinaapp.com/archives/1601各个MQTT SERVER功能列表: http://blog.lenix.xyz/ ...

  5. 漫谈LiteOS-端云互通组件-MQTT开发指南(上)

    1.介绍 SDK简介 Agent Tiny是部署在具备广域网能力.对功耗/存储/计算资源有苛刻限制的终端设备上的轻量级互联互通中间件,您只需调用API接口,便可实现设备快速接入到物联网平台以及数据上报 ...

  6. 漫谈LiteOS-端云互通组件-MQTT开发指南(下)

    1.介绍 SDK简介 Agent Tiny是部署在具备广域网能力.对功耗/存储/计算资源有苛刻限制的终端设备上的轻量级互联互通中间件,您只需调用API接口,便可实现设备快速接入到物联网平台以及数据上报 ...

  7. Mqtt开发笔记:windows下C++ ActiveMQ客户端介绍、编译和使用

    前话   项目需求,需要使用到mqtt协议,之前编译QtMqtt库,不支持队列模式queue(点对点),只支持订阅/发布者模式.,所以使用C++ ActiveMQ实现.   MQTT协议 简介   M ...

  8. Electron Angular 开发小记

    一介绍 electron分为主进程和渲染进程,主进程负责和原生交互,控制窗口等. 渲染进程就是普通网页.主进程和渲染进程可以通过ipcMain(主进程使用)及ipcRenderer(渲染进程用)通信 ...

  9. 微软颜龄Windows Phone版开发小记

    随着微软颜龄中文网cn.how-old.net的上线,她也顺势来到了3大移动平台. 用户在微软颜龄这一应用中选择一张包含若干人脸的照片,就可以通过云计算得到他们的性别和年龄. 今天我们就和大家分享一下 ...

随机推荐

  1. 【阿里云产品公测】PTS测试 SLB+ECS+RDS组合的DZ论坛负载极限压力,100并发2000页

    作者:阿里云用户woaj01 ​​环境介绍: 1.ECS:1核 1G 5M 杭州 2.RDS:240M  5G  杭州内网 3.SLB:私网实例​ 配置测试环境: 测试脚本: 1.生成参数文件,我的方 ...

  2. 【Android 界面效果15】Android UI 之一步步教你自定义控件(自定义属性、合理设计onMeasure、合理设计onDraw等)

        Android开发做到了一定程度,多少都会用到自定义控件,一方面是更加灵活,另一方面在大数据量的情况下自定义控件的效率比写布局文件更高.     一个相对完善的自定义控件在布局文件中和java ...

  3. leetcode 题解: Length of Last Word

    leetcode: Given a string s consists of upper/lower-case alphabets and empty space characters ' ', re ...

  4. frame,bounds,center分析

    采用CGPoint来表示坐标系X,Y位置,创建一个坐标的方式为:CGPoint point=CGPointMake(x,y) CGSize用来表示视图的宽度和高度,可以用CGSizeMake(widt ...

  5. 《MFC游戏开发》笔记九 游戏中的碰撞判定初步&怪物运动简单AI

    本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9374935 作者:七十一雾央 新浪微博:http:// ...

  6. html + js 右 点击 弹出 菜单

    页面 引用jar 包 <link rel="stylesheet" href="../../style/zui.min.css" type="t ...

  7. 如何优雅地制作精排 ePub —— 个人电子书制作规范及基本样式表

    随着大数据时代的到来,多种移动阅读终端方兴未艾 —— Amazon Kindle不再小众.各互联网巨头纷纷推出旗下的电子书阅读软件.有了阅读的软件/硬件支持,必不可少的就是阅读什么的问题了.ePub格 ...

  8. 有一种风格,叫做 Low Poly 3D

    原作:Simon阿文    杂交编辑者:RhinoC       个人更推崇使用第二款神器 ImageTriangulator :http://www.conceptfarm.ca/2013/port ...

  9. Terminate program hitting CTRl+C within GDB

    Q: My program is determined to stop its execution by hitting CTRL+C in command window. By now, i hav ...

  10. 转: 数字证书原理 https 完整过程解析

    点评: 讲的非常的详细与全面,值得一看. 转: http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html 文中首先解释了加密解 ...