前言

MQTT(Message Queuing Telemetry Transport),是一个物联网传输协议,它被设计用于轻量级的发布/订阅式消息传输,旨在为低带宽和不稳定的网络环境中的物联网设备提供可靠的网络服务。MQTT是专门针对物联网开发的轻量级传输协议。MQTT协议针对低带宽网络,低计算能力的设备,做了特殊的优化,使得其能适应各种物联网应用场景。本文旨在研究其在消息发布/订阅/接收场景下的应用.

MQTT协议中的几个重要概念

  • 服务端

    是发送消息的客户端和请求订阅的客户端之间的中介,又称为broker.它接收来自客户端的网络连接;接收客户端发布的消息;处理客户端的订阅和取消订阅请求;转发相应消息给符合条件的已订阅客户端.

  • 客户端

    订阅相关的消息;发布消息给其它相关的客户端

  • 订阅

    订阅包含一个主题过滤器和一个最大的服务质量(QoS)等级.客户端只有订阅了相关主题时,才能接收到对应主题的消息

mosquitto编译安装及使用

mosquitto是一款实现了MQTT协议v3.1版的开源消息代理软件,下载地址https://mosquitto.org/download/,使用的是目前最新的版本1.4.10

tar xvf mosquitto-1.4.10.tar.gz
cd mosquitto-1.4.10
vi config.mk(将WITH_SRV:=yes中的yes改为no,否则会报ares.h文件找不到的错误)
make
sudo make install

如果不做全局安装的话,需要将lib/libmosquitto.so.1动态库拷贝到/usr/lib/下,然后执行,否则会报动态库无法使用的错误.

安装完毕后,我们来模拟下整个信息推送的过程.

我们用3个Terminal分别表示broker,订阅者和发布者.

Terminal A启动mosquitto broker服务,它可以监听到所有的交互过程

mosquitto

Terminal B开启订阅服务,之后所有关于该订阅主题的消息,它都能接收到

mosquitto_sub -v -t shopping

参数-v显示详细信息,-t表示主题

Terminal C发布消息

mosquitto_pub -t shopping -m "What a nice day! Go shopping with me?"

参数-t表示主题,-m表示具体消息的内容

mtqq_mosquitto

MQTT Androd客户端

利用MQTT3的java实现代码,做了简单的android客户端

mtqq_mosquitto

主界面上放了4个按钮,分别对应连接,订阅,发布和断开连接4个操作.在操作之前,必须先启动MQTT服务,我这服务器的ip地址是10.10.10.48,然后在android端按下CONNECT按钮,可以看到logcat的连接成功的打印信息,接着再按下SUBSCRIBE的按钮完成主题为shopping的订阅(作为demo,我这里写死了).为了接收到android端发布的信息,我在服务器端打开了一个终端,同样订阅了shopping为主题的消息.一切准备工作就绪后,按下android端的PUBLISH,完成之后,就可以在订阅的终端看到shopping What a nice day! Go shopping with me?的主题消息.

mtqq_mosquitto

mtqq_mosquitto

android端除了可以发送消息,当然也可以接收.打开另一个终端,发布一条主题为shopping的消息

mosquitto_pub -t shopping -m "Sorry,I have no time."

可以看到android中的logcat,显示已经接收到了相应的消息.

mtqq_mosquitto

mtqq_mosquitto

Android工程下载

https://github.com/djstava/MqttClientAndroid

参考文献

1 https://mosquitto.org/documentation/

2 http://tokudu.com/post/50024574938/how-to-implement-push-notifications-for-android

3 http://blog.csdn.net/xukai871105/article/details/39252653

4 http://mqtt.org/

5 https://github.com/LichFaker/MqttClientAndroid

作者:djstava
链接:http://www.jianshu.com/p/a7de93895416
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 
http://www.jianshu.com/p/a7de93895416

MQTT协议学习及实践(Linux服务端,Android客户端的例子)的更多相关文章

  1. 停车场管理软件附带源代码 J2EE服务端+android客户端

    该源码是停车场管理软件附带源代码 J2EE服务端+android客户端,也是一套停车场管理车辆进出的管理软,喜欢的朋友可以看看吧. 应用的后台管理主要功能介绍:1  机构管理 ,机构有从属管理< ...

  2. Netty学习笔记(二) 实现服务端和客户端

    在Netty学习笔记(一) 实现DISCARD服务中,我们使用Netty和Python实现了简单的丢弃DISCARD服务,这篇,我们使用Netty实现服务端和客户端交互的需求. 前置工作 开发环境 J ...

  3. 红帽学习笔记[RHCE]OpenLDAP 服务端与客户端配置

    目录 OpenLDAP 服务端与客户端配置 关于LDIF 一个LDIF基本结构一个条目 属性 Object的类型 服务端 安装 生成证书 生成默认数据 修改基本的配置 导入基础数据 关于ldif的格式 ...

  4. C#Winform窗体实现服务端和客户端通信例子(TCP/IP)

    Winform窗体实现服务端和客户端通信的例子,是参考这个地址 http://www.cnblogs.com/longwu/archive/2011/08/25/2153636.html 进行了一些异 ...

  5. SVN1.6服务端和客户端安装配置指导

    本节向大家描述SVN1.6服务端和客户端安装配置步骤,随着SVN的快速发展,版本也进行了升级更新,本节就和大家一起学习一下SVN1.6服务端和客户端安装配置步骤,欢迎大家一起来学习.下面是具体介绍.1 ...

  6. 采用MQTT协议实现android消息推送(2)MQTT服务端与客户端软件对比、android客户端示列表

    1.服务端软件对比 https://github.com/mqtt/mqtt.github.io/wiki/servers 名称(点名进官网) 特性 简介 收费 支持的客户端语言 IBM MQ 完整的 ...

  7. MQTT 协议学习: 总结 与 各种定义的速查表

    背景 经过几天的学习与实操,对于MQTT(主要针对 v3.1.1版本)的学习告一段落,为了方便日后的查阅 本文链接:<MQTT 协议学习: 总结 与 各种定义的速查表> 章节整理 MQTT ...

  8. MQTT 协议学习:002- 通信报文的构成

    背景 之前工作中参与有关协议调试的时候,发现对于协议帧的解析是比较重要的. 参考:<MQTT协议 -- 消息报文格式>.<基于STM32实现MQTT>.<MQTT协议从服 ...

  9. MQTT 协议学习:004-MQTT建立通信与 CONNECT 、CONNACK 报文

    背景 上一讲 MQTT 协议学习:通信报文的构成介绍了在MQTT通信中,各报文的通信流程:从本讲开始,我们开始介绍实际中使用的报文,以及它们的组成. CONNECT - 连接请求 报文 客户端到服务端 ...

随机推荐

  1. 阿里云服务器安全设置 分类: B3_LINUX 2014-07-24 11:10 5197人阅读 评论(1) 收藏

    1.开启云盾所有服务 2.通过防火墙策略限制对外扫描行为 请您根据您的服务器操作系统,下载对应的脚本运行,运行后您的防火墙策略会封禁对外发包的行为,确保您的主机不会再出现恶意发包的情况,为您进行后续数 ...

  2. Android JNI编程(八)——体验AS2.2.2编写Jni程序、Java调C、C调Java函数、将C代码中的Log打印至Logcat

    版权声明:本文出自阿钟的博客,转载请注明出处:http://blog.csdn.net/a_zhon/. 目录(?)[+] 不得不说在AS2.2以上的版本进行开发就一个字——爽,在2.0上使用jni出 ...

  3. Colder框架硬核更新(Sharding+IOC)

    目录 引言 控制反转 读写分离分库分表 理论基础 设计目标 现状调研 设计思路 实现之过五关斩六将 动态对象 动态模型缓存 数据源移植 查询表达式树深度移植 数据合并算法 事务支持 实际使用 展望未来 ...

  4. 小强的HTML5移动开发之路(53)——jQueryMobile页面间参数传递

    在单页模版中使用基于HTTP的方式通过POST和GET请求传递参数,而在多页模版中不需要与服务器进行通信,通常在多页模版中有以下三种方法来实现页面间的参数传递. 1.GET方式:在前一个页面生成参数并 ...

  5. Ajax的get、post和ajax提交

    JQuery.get(url,[data],[callback],[type]) []里面的参数是可选的,不是必填的. [data]:带发送的key/value数据. [callback]:载入成功时 ...

  6. 详解PHP设置定时任务的实现方法

    详解PHP设置定时任务的实现方法 一.总结 一句话总结: 1.ignore_user_abort(true)是什么意思? 无论客户端是否关闭浏览器,下面的代码都将得到执行 2.set_time_lim ...

  7. FullPage.js全屏滚动插件解说

    1.主要功能 1).支持鼠标滚动 2).多个回调函数 3).支持手机.平板触屏事件 4).支持css3动画 5).支持窗口缩放 6).窗口缩放时自动调整 7).可设置滚动宽度.背景颜色.滚动速度.循环 ...

  8. ArcEngine中最短路径的实现

    原文 ArcEngine中最短路径的实现 最短路径分析属于ArcGIS的网络分析范畴.而ArcGIS的网络分析分为两类,分别是基于几何网络和网络数据集的网络分析.它们都可以实现最短路径功能.下面先介绍 ...

  9. Java程序猿的JavaScript学习笔记(5——prototype和Object内置方法)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...

  10. 【Material Design视觉设计语言】开篇

    作者:郭孝星 微博:郭孝星的新浪微博 邮箱:allenwells@163.com 博客:http://blog.csdn.net/allenwells Github:https://github.co ...