Flutter 是 Google 推出并开源的挪动利用开发框架,主打跨平台、高保真、高性能。开发者能够通过 Dart 语言开发 App,一套代码同时运行在 iOS 和 Android 平台。 Flutter 提供了丰盛的组件、接口,开发者能够疾速地为 Flutter 增加 native 扩大。同时 Flutter 还应用 Native 引擎渲染视图,这无疑能为用户提供良好的体验。

MQTT 是一种基于公布/订阅模式的轻量级物联网音讯传输协定 ,可在重大受限的硬件设施和低带宽、高提早的网络上实现稳固传输。它凭借简略易实现、反对 QoS、报文小等特点,占据了物联网协定的半壁江山。

本文次要介绍如何在 Flutter 我的项目中应用 MQTT,实现客户端与 MQTT 服务器的连贯、订阅、勾销订阅、收发音讯等性能。

我的项目初始化

新建我的项目

新建一个我的项目,能够参考以下链接:

  • Set up an editor
  • Android Studio and IntelliJ

装置依赖

增加依赖到 pubspec.yaml 文件中

dependencies:   mqtt_client: ^7.2.1

装置依赖:

flutter pub get

导入

import 'package:mqtt_client/mqtt_client.dart';

MQTT 的应用

连贯 MQTT 服务器

本文将应用 EMQ X 提供的 收费公共 MQTT 服务器,该服务基于 EMQ X 的 MQTT 物联网云平台 创立。服务器接入信息如下:

  • Broker: broker.emqx.io
  • TCP Port: 1883
  • Websocket Port: 8083

连贯示例代码

Future<MqttServerClient> connect() async {  MqttServerClient client =      MqttServerClient.withPort('broker.emqx.io', 'flutter_client', 1883);  client.logging(on: true);  client.onConnected = onConnected;  client.onDisconnected = onDisconnected;  client.onUnsubscribed = onUnsubscribed;  client.onSubscribed = onSubscribed;  client.onSubscribeFail = onSubscribeFail;  client.pongCallback = pong;  final connMessage = MqttConnectMessage()      .authenticateAs('username', 'password')      .keepAliveFor(60)      .withWillTopic('willtopic')      .withWillMessage('Will message')      .startClean()      .withWillQos(MqttQos.atLeastOnce);  client.connectionMessage = connMessage;  try {    await client.connect();  } catch (e) {    print('Exception: $e');    client.disconnect();  }  client.updates.listen((List<MqttReceivedMessage<MqttMessage>> c) {    final MqttPublishMessage message = c[0].payload;    final payload =    MqttPublishPayload.bytesToStringAsString(message.payload.message);    print('Received message:$payload from topic: ${c[0].topic}>');  });  return client;}

回调办法阐明

// 连贯胜利void onConnected() {  print('Connected');}// 连贯断开void onDisconnected() {  print('Disconnected');}// 订阅主题胜利void onSubscribed(String topic) {  print('Subscribed topic: $topic');}// 订阅主题失败void onSubscribeFail(String topic) {  print('Failed to subscribe $topic');}// 胜利勾销订阅void onUnsubscribed(String topic) {  print('Unsubscribed topic: $topic');}// 收到 PING 响应void pong() {  print('Ping response client callback invoked');}

MqttConnectMessage:设置连贯选项,蕴含超时设置,认证以及遗愿音讯等。

client.updates.listen:用于监听已订阅主题的音讯达到。

证书连贯示例

/// Security contextSecurityContext context = new SecurityContext()  ..useCertificateChain('path/to/my_cert.pem')  ..usePrivateKey('path/to/my_key.pem', password: 'key_password')  ..setClientAuthorities('path/to/client.crt', password: 'password');client.secure = true;client.securityContext = context;

其余 MQTT 操作

主题订阅

client.subscribe("topic/test", MqttQos.atLeastOnce)

音讯公布

const pubTopic = 'topic/test';final builder = MqttClientPayloadBuilder();builder.addString('Hello MQTT');client.publishMessage(pubTopic, MqttQos.atLeastOnce, builder.payload);

勾销订阅

client.unsubscribe('topic/test');

断开连接

client.disconnect();

测试

咱们给该我的项目编写了一个简略的 UI 界面,并配合 MQTT 5.0 客户端工具 - MQTT X 进行以下测试:

  • 连贯
  • 订阅
  • 公布
  • 勾销订阅
  • 断开连接

利用界面:

应用 MQTTX 作为另一个客户端进行音讯收发:

咱们能够看到整个过程的日志。

总结

至此,咱们实现了在 Android 平台上利用 Flutter 构建 MQTT 利用,实现了客户端与 MQTT 服务器的连贯、订阅、勾销订阅、收发音讯等性能。

Flutter 通过对立的开发语言和跨平台个性让开发弱小的挪动利用变得非常容易,它未来可能会是开发挪动利用的最佳解决方案。联合 Flutter、MQTT 协定及 MQTT 云服务,咱们能够开发更多乏味的利用。

版权申明: 本文为 EMQ 原创,转载请注明出处。

原文链接:https://www.emqx.io/cn/blog/u...