MQTT相关
MQTT官网:http://mqtt.org/
MQTT介绍:http://www.ibm.com
MQTT Android github:https://github.com/eclipse/paho.mqtt.android
MQTT API:http://www.eclipse.org/paho/files/javadoc/index.html
MQTT Android API: http://www.eclipse.org/paho/files/android-javadoc/index.html
MQTT服务器搭建
- 环境:windows7 64位
- JAVA环境:jdk 1.8.0
- 下载:Apollo服务器
以下为步骤:
- 下载Apollo服务器后,解压安装;
- 用命令行进入到安装目录bin目录下
- 输入 apollo create xxx (xxx为服务器实例名,eg.apollo create xmaihh)
执行之后会在bin目录下创建名称为xxx的文件夹,比如我生成的文件夹是 xmaihh
xxx文件夹下etc\apollo.xml文件是 配置服务器文件信息
etc\users.properties文件包含连接MQTT服务器时用到的用户名和密码,默认为admin=password,即账号为admin,密码为password,可自行更改。 - 用命令行进入到刚创建的xxx\bin目录下,输入apollo-broker.cmd run开启服务器
- 在浏览器输入http://127.0.0.1:61680/,查看是否安装成功
MQTT Android客户端
- 环境:AndroidStudio 3.0.1
- topic:中文意思是“话题”。在MQTT中订阅了(subscribe)同一话题(topic)的客户端会同时收到消息推送。
- clientId:客户身份唯一标识。
- qos:服务质量。
- retained:要保留最后的断开连接信息。
- MqttAndroidClient#subscribe():订阅某个话题。
- MqttAndroidClient#publish(): 向某个话题发送消息,之后服务器会推送给所有订阅了此话题的客户。
- userName:连接到MQTT服务器的用户名。
- passWord :连接到MQTT服务器的密码
以下为步骤:
添加依赖
1
2
3
4
5
6
7
8
9repositories {
maven {
url "https://repo.eclipse.org/content/repositories/paho-snapshots/"
}
}
dependencies {
compile 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0'
compile 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
}添加权限
1
2
3<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />注册Service
1
2<!-- Mqtt Service -->
<service android:name="org.eclipse.paho.android.service.MqttService" />具体实现
1 | /** |
初始化各个参数,之后连接服务器。连接成功之后在http://127.0.0.1:61680/ 看到自动创建了名称为”topic”的topic。这里我使用两台真机。http://127.0.0.1:61680/ 服务端看到的是这个样子
- 模拟器运行的时候host = “tcp://10.0.2.2:61613”,因为10.0.2.2 是模拟器设置的特定ip,是你电脑的别名。真机运行的时候host = “tcp://192.168.102.216:61613”。192.168.102.216是我主机的IPv4地址,查看本机IP的cmd命令为ipconfig/all。
- 两次运行时的clientId不能一样(为了保证客户标识的唯一性)
访问管理界面
要修改前面创建的xxx文件夹下etc\apollo.xml文件,添加你的host就可以通过host访问管理界面,否则只能通过 http://127.0.0.1:61680 和 https://127.0.0.1:61681 访问1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39... ...
<virtual_host id="xmaihh">
<!--
You should add all the host names that this virtual host is known as
to properly support the STOMP 1.1 virtual host feature.
-->
<host_name>xmaihh</host_name>
<host_name>localhost</host_name>
<host_name>127.0.0.1</host_name>
<!--以下为添加内容-->
<host_name>192.168.102.216</host_name>
<!--以上为添加内容-->
<!-- Uncomment to disable security for the virtual host -->
<!-- <authentication enabled="false"/> -->
<!-- Uncomment to disable security for the virtual host -->
<!-- <authentication enabled="false"/> -->
<access_rule allow="users" action="connect create destroy send receive consume"/>
<!-- You can delete this element if you want to disable persistence for this virtual host -->
<leveldb_store directory="${apollo.base}/data"/>
</virtual_host>
<web_admin bind="http://127.0.0.1:61680"/>
<web_admin bind="https://127.0.0.1:61681"/>
<!--以下为添加内容-->
<web_admin bind="http://192.168.102.216:61680"/>
<web_admin bind="https://192.168.102.216:61681"/>
<!--以上为添加内容-->
<connector id="tcp" bind="tcp://0.0.0.0:61613" connection_limit="2000"/>
<connector id="tls" bind="tls://0.0.0.0:61614" connection_limit="2000"/>
<connector id="ws" bind="ws://0.0.0.0:61623" connection_limit="2000"/>
<connector id="wss" bind="wss://0.0.0.0:61624" connection_limit="2000"/>
<key_storage file="${apollo.base}/etc/keystore" password="password" key_password="password"/>