python开发通讯软件_【MQTT应用学习系列(一)】Apollo代理+paho_mqtt开发Python客户端实现MQTT简单通信...

一、运行环境准备

(一)操作系统:window 7 x64专业版

(二)软件准备

Apollo服务器软件:apache-apollo-1.7.1-windows-distro.zip

java:jdk-8u77-windows-x64.exe (Apollo需要java环境,据官方说得version 1.6以上)

python:python-2.7.12.msi(开发客户端用)

(三)软件安装

1. java安装教程,自行百度,注意配置环境变量;

2. python环境配置

步骤(1):安装python,注意环境变量配置

步骤(2):安装paho-mqtt   python包(cmd窗口执行命令)

pip install paho-mqtt

Python环境配置完成。

3. Apollo安装步骤参见:http://activemq.apache.org/apollo/documentation/getting-started.html

步骤(1):解压(cmd窗口运行)

jar -xvf apache-apollo-1.7.1-windows-distro.zip

步骤(2):打开cmd窗口,执行以下步骤

(a)命令行进入Apollo解压出来的文件夹下的bin目录

(b)执行命令

apollo create mybroker

..\bin目录下生成文件夹mybroker(可以换成其他名称)。此时代理默认用户: admin,密码: password

4. Apollo代理配置

(1)进入目录“..\bin\mybroker\etc”,文件列表如图

我们暂时只关注文件:

apollo.xml-------配置代理服务器的端口,包括TCP,ssl,websockets等;

groups.properties--------配置管理用户,应该用来登入apollo后台管理的;

users.properties---------配置用户名和密码。

(2)用文本编辑软件(我用的是sublime text 2)打开user.properties,修改如下。即有两个用户,admin是默认已有用户,marshal是新添加的用户,其密码是123456。

admin=password

marshal = 123456

(3)打开groups.properties,修改如下。除了默认的admin用户,marshal也可以进入后台查看broker的信息。

admins=admin|marshal

(4)打开apollo.xml,一般都不改,我没作修改。简单解释一下重要的几个东西。

web_admin------用来web登录查看Apollo后台信息,浏览器输入:"http://127.0.0.1:61680"和"https://127.0.0.1:61681"即可进入登录界面;

客户端连接broker的端口:TCP------tcp://0.0.0.0:61613,SSL/TLS------tls://0.0.0.0:61614,websockets      ws------"ws://0.0.0.0:61623"   wss-----"wss://0.0.0.0:61624"。最后这两个什么区别,我不清楚,有知道的大神求普及!

The default configuration with tls/ssl enabled.

mybroker

localhost

127.0.0.1

至此,broker的测试配置完成。

三、MQTT测试

(一)运行broker

1. 打开cmd命令窗口,cd命令进入..\bin\mybroker\bin目录,执行

apollo-broker.cmd run

该命令运行结束后,显示如下图:

2. 浏览器输入“http://localhost:61680” 或者“127.0.0.1:61680”, 登录进入broker后台管理界面(可用admin,也可以用marshal),后台界面如图

(二)客户端开发

1. 创建Python文件sub_pub_ex.py(名称任意),脚本内容如下:

#!/usr/bin/python

import paho.mqtt.client as mqtt

import time

def on_connect(client, userdata, flags, rc):

print("Connected with result code "+str(rc)+'\n')

def on_message(client, userdata, msg):

print(msg.topic+" "+str(msg.payload)+'\n')

client1 = mqtt.Client()

client1.username_pw_set("marshal", "123456") #username: marshal | password: 123456

client1.on_connect = on_connect

client1.on_message = on_message

client2 = mqtt.Client()

client2.username_pw_set("admin", "password") #username: admin | password: password

client2.on_connect = on_connect

client2.on_message = on_message

HOST = "127.0.0.1" #IP address of broker

client1.connect_async(HOST,61613,60)

client2.connect_async(HOST,61613,60)

client1.loop_start() #client1 runs a thread at background

client2.loop_start() #client2 runs a thread at background

for i in range(30):

time1 = time.time()

client1.subscribe('manipulated') #client1 subcribes a topic 'manipulated'

client2.subscribe('position') #client2 subcribes a topic 'position'

client2.publish('manipulated',i*0.02) #client2 publishes topic 'manipulated' with content 'i*0.02'

client1.publish('position',i) #client1 publishes topic 'position' with content 'i'

time2 = time.time()

interval = time2-time1 #interval in each data exchange

print 'Interval '+str(i)+': '+str(interval)+'\n'

time.sleep(1)

#stop threads in background

client1.loop_stop()

client2.loop_start()

说明:

1)创建了两个客户端:client1(marshal : 123456)和client2(admin : password)

2)脚本功能:client1订阅主题消息“manipulated”,发布主题消息“position”;client2订阅主题消息“position”,发布主题消息“manipulated”。每隔1秒执行一次订阅和发布,共执行10次(i = 0,1,...,9)。

3)记录了每次完成订阅发布消耗的时间,因为是在一台机器上跑的broker和client,所以耗时很少。

其他不懂的请查阅官方文档:https://pypi.python.org/pypi/paho-mqtt

2. 'F5'执行python脚本,即开始运行,上几张运行结果图。

图a. python shell的运行结果

说明:由于我用了connect_async和loop_start,两个客户端在执行callback函数on_message时是后台双线程执行(这个知识点请看paho_mqtt的文档说明),打印出来的订阅消息可能并不规律;不过测试还是挺成功的。

图b. web后台界面(connectors)

说明:有两个客户端连接到broker了,同时可以查看他们发布和接收的消息数目

图c. web后台界面(Virtual Host)

说明:broker的名称为mybroker,通讯过程对两个主题进行交互:manipulated和position。

总结一下,Apollo作broker的配置和操作还是挺简单的,看网上的一些博客说明,感觉比很多broker工具的部署都简单,当然功能比较如何,鄙人没测试过,也没调查过,就不清楚了。paho_mqtt这个库还是比较简单易懂的,也挺好用,尤其它的文档做得比较不错。网上的例程没多少,好多博客基本也都是抄官方文档的。我个人通读了一遍文档,自己改了改,也算是基本掌握了如何使用这个库。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值