MQTT入门

概念

mqtt意为消息队列遥测传输,是IBM开发的一个即时通讯协议。由于其维护一个长连接以轻量级低消耗著称,所以常用于移动端消息推送服务开发。

协议格式

mqtt协议控制报文的格式包含三部分:

以固定报头、可变报头和有效载荷,其中固定报文头是所有控制报文都有的,可变报头和有效载荷都是部分控制报文。

mqtt是二进制的协议,控制字段是精确到Bit级别的,单纯这一点就足以为其在物联网领域占据一席之地。mqtt是不支持分包等机制,并不适宜一些数据包特别大的应用场景。

mqtt特性

  • 使用发布/订阅消息模式,提供一对多消息发布;
  • 对负载内容屏蔽的消息传输;
  • 使用TCP/IP进行网络连接;
  • 具有三种消息发布服务质量选项:
  • 1."至多一次",通常app的推送使用的是这种模式,也就是说,如果移动设备在消息推送的时候没有联网,那么再次联网就不会收到通知了;
  • 2."至少一次",可以确保消息收到,但消息可能会重复;
  • 3."只有一次",确保消息到达一次,比如计费系统,如果出现消息重复或者丢失会导致系统结果不正确的问题。
  • 小型传输,开销很小,协议交换最小化,以降低网络流量;
  • 通知有关各方客户端异常中断的机制。

mqtt协议实现方式

发布者----发布消息---->代理-------推送消息----->订阅者
发布者----发布消息---->代理<------订阅消息-----订阅者

在mqtt协议中有三种身份:

  • 发布者(publish):发布者是客户端,可以进行发布消息
  • 代理(broker):代理指的是服务器,比较有名的是emqtt,当前可以其他成熟的框架去搭建mqtt服务
  • 订阅者(subscribe):指的客户端,不过发布者同时也可以是订阅者。

mqtt服务端和客户端实现的功能

mqtt服务端
  • 接受来自客户端的网络连接;
  • 接受客户发布的应用信息;
  • 处理来自客户端主题订阅和退订请求;
  • 向订阅的客户端转发应用程序消息
mqtt客户端
  • 给其他客户端发布订阅的消息;
  • 订阅其他客户端发布的消息;
  • 退订和订阅主题;
  • 断开服务器连接

mqtt协议中的方法

  • connect:等待服务器建立连接;
  • disconnect:等待客户端完成所做的工作,并与服务器断开TCP/IP会话;
  • subscribe:主题订阅;
  • unsubscribe:主题取消订阅;
  • publish:发送消息

mqtt的安装

# sudo yum install epel-release
# sudo yum install mosquitto mosquitto-clients
# sudo systemctl start mosquitto
mqtt默认是以1883端口运行的

mqtt简单使用

mosquitto的配置文件为/etc/mosquitto/mosquitto.conf/
1.添加密码配置并且不允许匿名用户登录
# sudo vim /etc/mosquitto/mosquitto.conf
allow_anonymous false #不允许匿名登录
password_file /etc/mosquitto/pwfile #配置用户密码文件
acl_file /etc/mosquitto/aclfile # 配置topic和用户 2.添加用户信息
# mosquitto_passwd -c /etc/mosquitto/pwfile ceshi
# mosquitto_passwd /etc/mosquitto/pwfile ceshi2
分别添加用户ceshi和ceshi2 3.添加topic和用户的关系(权限配置)
# sudo vim /etc/mosquitto/aclfile
# ceshi只能发布V222为前缀的主题,订阅V333开头的主题
user ceshi
topic write V222/#
topic read V333/#
# ceshi2只能订阅以V222为前缀的主题
user ceshi2
topic read V222/# - write:发布订阅
- read:接受订阅 4.启动
-c :指定配置文件启动
-d: 后台运行
mosquitto -c /etc/mosquitto/mosquitto.conf -d 5.测试
发布订阅:mosquitto_pub
接受订阅:mosquitto_sub
参数:
-h :服务器主机
-t :指定主题
-u :用户名
-P : 密码
-i :客户端id
-m :发布的消息内容 # mosquitto_sub -h localhost -t "V222" -u ceshi2 -P 123456 # mosquitto_pub -h localhost -t "V222" -m "Hello world" -u ceshi -P 123455
配置文件解析
# 系统状态的刷新时间
# sys_interval 10 # 系统资源的回收时间,0表示尽快处理
# store_clean_interval 10 # 服务进程的pid
# pid_file /var/run/mosquitto.pid # 服务进程的系统用户
# user mosquitto # 客户端心跳消息的最大并发数
# max_inflight_messages 10 # 客户端心跳消息缓存队列
# max_queued_messages 100 # 用于设置客户端长连接的过期时间,默认永不过期
# persistent_client_expiration # 服务绑定的IP地址
# bind_address # 服务绑定的端口
# port 1883 # 消息自动保存的间隔时间
# autosave_interval 1800 # 消息自动保存功能的开关
# autosave_on_changes false # 持久化功能的开关
# persistence true # 持久化DB文件
# persistence_file mosquitto.db # 持久化DB文件目录
# persistence_location /var/lib/mosquitto/ # 4种日志模式: stdout、stderr、syslog、topic
# none:则表示不记录日志
log_dest none
# 选择日志的级别
# log_type error
# log_type warning
# log_type notice
# log_type information # 是否记录客户端连接信息
# connection_messages true # 是否记录日志时间
# log_timestamp true # 允许匿名用户
# allow_anonymous false # 用户/密码文件,默认格式为:user/passwd
# password_file /etc/mosquitto/passwd

初始mqtt服务的更多相关文章

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

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

  2. C# MQTT 服务端客户端通讯

    关于MQTT 在这里我就不做过多的介绍了 , 超时空连接点我 MQTT示例 注: 该示例演示统一使用WPF, 简单MVVM模式演示, 复制代码需注意引用 NuGet包  GalaSoft MQTT服务 ...

  3. 玩转OneNET物联网平台之MQTT服务④ —— 远程控制LED(设备自注册)+ Android App控制

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  4. 玩转OneNET物联网平台之MQTT服务③ —— 远程控制LED(设备自注册)

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  5. 玩转OneNET物联网平台之MQTT服务② —— 远程控制LED

    1.理论基础     参考博主线上博文: 玩转PubSubClient MQTT库 玩转OneNET物联网平台之简介 玩转OneNET物联网平台之MQTT服务① 2.远程控制LED 2.1 实验材料 ...

  6. 玩转OneNET物联网平台之MQTT服务⑤ —— OneNet智能灯+MVP框架

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  7. 玩转OneNET物联网平台之MQTT服务⑦ —— 远程控制LED(数量无限制)+ Android App控制 优化第一版

    授人以鱼不如授人以渔,目的不是为了教会你具体项目开发,而是学会学习的能力.希望大家分享给你周边需要的朋友或者同学,说不定大神成长之路有博哥的奠基石... QQ技术互动交流群:ESP8266&3 ...

  8. Java连接MQTT服务-wss方式

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  9. Java连接MQTT服务-ws方式

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

随机推荐

  1. java并发编程(二十)----(JUC集合)CopyOnWriteArrayList介绍

    这一节开始我们正式来介绍JUC集合类.我们按照List.Set.Map.Queue的顺序来进行介绍.这一节我们来看一下CopyOnWriteArrayList. CopyOnWriteArrayLis ...

  2. 完整原型链详细图解之JS构造函数、原型 原型链、实例化对象

    一.首先说一下什么是构造函数: 构造函数:用来在创建对象时初始化对象.特点:构造函数名一般为大写字母开头:与new运算符一起使用来实例化对象. 举例: function Person(){} //Pe ...

  3. Vue系列:为不同页面设置body背景颜色

    由于SPA页面的特性,传统的设置 body 背景色的方法并不通用. 解决方案:利用组件内的路由实现 代码参考如下

  4. http客户端-性能比较系列-第二篇-多线程

    系列文章: 单线程性能测试:https://www.cnblogs.com/victor2302/p/11077208.html 多线程性能测试:https://www.cnblogs.com/vic ...

  5. 【0812 | Day 13】闭包函数/装饰器/迭代器

    目录 闭包函数 无参装饰器 有参装饰器 迭代器 闭包函数 一.什么是闭包? 闭包指的是:函数内部函数对外部作用域而非全局作用域的引用. def outter(): x = 1 def inner(): ...

  6. 精通Android4.0开发视频【张泽华】-完整版下载

    观看须知: 本视频教程为黑马程序员 张泽华老师历经2年时间整理 适合有JavaWeb基础同学学习,教程采用的AVI方式发布,所以看起来很流畅. 视频概括: 1. 本套视频不同于市面上任何一套andro ...

  7. Vue中拆分视图层代码的5点建议

    目录 一.框架的定位 二. Vue开发中的script拆分优化 1.组件划分 2.剥离业务逻辑代码 3. 剥离数据转换代码 4. 善用computed和filters处理数据展示 5. 使用direc ...

  8. 7.19 包 logging模块 hashlib模块 openpyxl模块 深浅拷贝

    包 包是什么 他是一系列文件的结合体,表现形式就是文件夹 包的本质还是模块 他通常会有__init__.py文件 我们首先回顾一下模块导入的过程 import module首次导入模块(.py文件) ...

  9. spring-boot-plus项目打包(七)

    spring-boot-plus项目打包 项目打包 spring-boot-plus项目使用maven assembly插件进行打包 根据不同环境进行打包部署 包含启动.重启命令,配置文件提取到外部c ...

  10. Python 字符串的所有方法详解

    name = "my name is {name} and my age is {age}" # 首字母大写 name.capitalize() # 统计某个字符的个数 name. ...