Mqtt实战项目

  • 一个基于Mqtt的小项目,服务器采用mosquitto,客户端有Python,C,Android三种,涉及SSL加密,传输内容:文字图片。
  • 时间推移,难免忘记当时学习配置的细节,已经没有再做了,有问题的请参考一下其他资料。
  • 环境:Ubuntu 16.04

目录

一.Mqtt相关

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和制动器(比如通过Twitter让房屋联网)的通信协议。
###1.1 延伸阅读
推荐一些背景补充:

  • 协议详细内容,我肯定说得不如协议内容中文版,建议大家先扫一下,对一些名词有印象,后续再查看。
    其中,比较重要的部分,也是代码里需要设置的可变头部部分,

  • 推荐几个比较好的学习地方:

1.2 协议特点

  • Mqtt使用发布/订阅的消息模式,提供一对多消息分发.
  • 对传输消息有三种服务质量(QoS):
    • 最多一次,这一级别会发生消息丢失或重复,消息发布依赖于底层TCP/IP网络。即:<=1
    • 至多一次,这一级别会确保消息到达,但消息可能会重复。即:>=1
    • 只有一次,确保消息只有一次到达。即:=1。在一些要求比较严格的计费系统中,可以使用此级别

订阅和发布以及代理服务器的理解示意图:

工作流:
服务器先启动,然后客户端订阅相关的Topic。Client A 和C发布主题为:QuestionWhat's the temperature?。Client B因为订阅了Question这个Topic,所以可以收到信息,Client B收到信息做判断后发布答案Topic: Temperture出去,订阅了相关Topic的Client A 和Client C能接收到37°。

  • 实现MQTT协议需要:客户端和服务器端
  • MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。
  • MQTT传输的消息分为:主题(Topic)和负载(payload)两部分
    Topic,可以理解为消息的主题,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload)
    payload,可以理解为消息的内容,是指订阅者具体要使用的内容

代理服务器,是用于服务客户端的,目前很多公司都有相关的服务: 列表
里面我只选用过Mosquitto,也就不做分析.

二.服务器

2.1 Mosquitto的安装与使用

  • Mosquitto加入库并更新:
sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
sudo apt-get update
  • 安装:
sudo apt-get install mosquitto

安装后位于:/etc/mosquitto,里面可以看到默认配置文件mosquitto.conf

  • 查看状态
sudo service mosquitto status
  • 开启和停止Mosquitto服务:
sudo service mosquitto start
sudo service mosquitto stop (常用,在测试SSL的时候)
  • Mosquittof服务器启动:
    上面的指令是加载默认参数,大多时候喜欢自己启动,也不麻烦
mosquitto -v (加载默认配置)
mosquitto -v -c xx/xx/mosquitto.conf -p 8883 (加载指定配置)

避免麻烦,建议在使用SSL新建一个配置文件,这样不用一直改来改去。-c加载配置文件,-p端口。

TCP端口8883和1883已在IANA注册,分别用于MQTT的TLS和非TLS通信。

2.2 Mosquitto-clients

上一步只是安装了Mosquitto服务器,不包括客户端,安装这个是用于调试,可以在命令行测试证书、ip等,很方便。

  • 安装
sudo apt-get install mosquitto-clients
  • 订阅
mosquitto_sub -t temperature 
  • 发布
mosquitto_pub -t temperature -m 37°

结果:
这里写图片描述

三.Python客户端

服务器我们借助mosquitto软件来试下,那么客户端我们当然不会自己去写一个协议.显然已经有很多先驱写了,我们只需要导入就好了.这里采用比较出名的Eclipse Paho库,它包含的各种语言,或者库列表.

看图就明白了:
这里写图片描述

3.1 导入库

pip3 install paho-mqtt

3.2 Code

  • 关键指令
#导入包
import paho.mqtt.client as mqtt

#创建client对象
client = mqtt.Client(id)

#连接
client.connect(host,post)

#订阅
client.subscribe(topic)
client.on_message = func #接收到信息后的处理函数

#发布
client.publish(topic, payload)
  • 完整Code
import paho.mqtt.client as mqtt
import sys

#改成自己的ip,命令ifconfig可以查看
host = "xx.xxx.xxx.xxx"
topic_sub = "Question"
topic_pub = "temperature"

def on_connect(client, userdata, flags, rc):
    print("Connected with result code " + str(rc))
    client.subscribe(topic_sub)

def on_message(client, userdata, msg):
    print(msg.payload) 
    client.publish(topic_pub, "37°")

def ma
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值