当前位置: 首页 > news >正文

微软网站设计seo顾问什么职位

微软网站设计,seo顾问什么职位,建设工程公司是干嘛的,网站宝二级域名怎么设置目录 引言 什么是MQTT? 在Flutter中使用MQTT 安装 iOS 安卓 创建一个全局的客户端对象 配置客户端对象 连接(异步) 监听接受的消息 发送消息 监听连接状态和订阅的回调 引言 随着移动应用开发技术的发展,实时通信成为…

目录

引言

什么是MQTT?

在Flutter中使用MQTT

安装

iOS 

安卓

创建一个全局的客户端对象

 配置客户端对象

 连接(异步)

监听接受的消息

发送消息 

监听连接状态和订阅的回调


引言

 随着移动应用开发技术的发展,实时通信成为了许多应用程序不可或缺的一部分。无论是社交应用中的即时消息传递,还是物联网(IoT)设备之间的数据交换,都需要一个高效稳定的通信机制。MQTT(Message Queuing Telemetry Transport)作为一种轻量级的消息协议,非常适合于这种场景。本文将介绍如何在Flutter项目中集成MQTT,并通过一个简单的示例来演示其基本用法。

什么是MQTT?

MQTT是一种基于发布/订阅模式的轻量级消息协议,设计初衷是为了提供低开销、低带宽的网络连接。它特别适合于远程位置的通信,如传感器与中央服务器之间的数据传输。MQTT的主要特点包括:

  • 轻量级:非常小的代码占用空间和带宽使用。
  • 发布/订阅模型:允许一对多的消息分发,即一个消息可以发送给多个客户端。
  • 服务质量(QoS):提供了三种不同的服务质量级别,以满足不同场景下的需求。
  • 安全性:支持TLS/SSL加密,确保数据传输的安全性。

 

在Flutter中使用MQTT

首先需要安装mqtt_client这个依赖,执行下面命令

flutter pub add mqtt_client 

安装

如果您在 Android 或 iOS 设备上的 Flutter 环境中使用客户端,则需要进行以下设备权限设置。

iOS 

将以下键添加到位于ios/Runner/Info.plist的Info.plist文件中:

<key>NSLocalNetworkUsageDescription</key>
<string>Looking for local tcp Bonjour service</string>
<key>NSBonjourServices</key>
<array><string>mqtt.tcp</string>
</array>

安卓

将以下 Android 权限添加到位于android/app/src/main/AndroidManifest.xml的AndroidManifest.xml文件中:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

在页面中导入:

import 'package:mqtt_client/mqtt_client.dart';

使用案例, 这里我们使用的是wss协议:

import 'dart:convert';
import 'package:flutter_diancan/utils/logger_helper.dart';
import 'package:mqtt_client/mqtt_client.dart';
import 'package:mqtt_client/mqtt_server_client.dart';
import 'package:shared_preferences/shared_preferences.dart';class MqttServe {final client = MqttServerClient('请求地址', '');Future<MqttClient> connect() async {try {client.setProtocolV311();client.logging(on: true);client.port = 443; // 端口号client.keepAlivePeriod = 60;client.websocketProtocols = ['mqtt'];client.useWebSocket = true;  // 因为我们这里使用的是wss协议所以加这个,这个根据自己的需求来定是否需要client.onConnected = onConnected;client.onDisconnected = onDisconnected;client.onUnsubscribed = onUnsubscribed;client.onSubscribed = onSubscribed;client.onSubscribeFail = onSubscribeFail;client.pongCallback = pong;client.connectTimeoutPeriod = 60;final connMess = MqttConnectMessage().authenticateAs("用户名", "密码").withClientIdentifier('Mqtt_MyClientUniqueId').withWillTopic('willtopic').withWillMessage('My Will message').startClean().withWillQos(MqttQos.atLeastOnce);client.connectionMessage = connMess;try {print('Connecting');await client.connect();} catch (e) {print('Exception: $e');client.disconnect();}client.updates!.listen((List<MqttReceivedMessage<MqttMessage?>>? c) async {final recMessage = c![0].payload as MqttPublishMessage;final payload = MqttPublishPayload.bytesToStringAsString(recMessage.payload.message);print('Received message:$payload from topic: ${c[0].topic}');});} catch (e, s) {LoggerHelper.fatal(e, s);}return client;}Future<void> sendMessage() async {if (client.connectionStatus?.state == MqttConnectionState.connected) {final builder = MqttClientPayloadBuilder();var payloadObject = {'MsgData': "发送成功啦"};print("发送的信息:${json.encode(payloadObject)} ");builder.addUTF8String(json.encode(payloadObject));client.publishMessage('发送消息的订阅地址', MqttQos.atLeastOnce, builder.payload!);}}// Connected callbackvoid onConnected() {print("已连接");try {// 连接后订阅client.subscribe('订阅地址', MqttQos.atLeastOnce);} catch (e, s) {LoggerHelper.fatal(e, s);}}// Disconnected callbackvoid onDisconnected() async {print('已断开');final SharedPreferences prefs = await SharedPreferences.getInstance();String? token = prefs.getString('token');if (token != null) {reconnect();}}Future<void> reconnect() async {print("重连中");int retryCount = 0;const maxRetries = 10;const baseRetryInterval = 2; // 初始重连间隔时间(秒)while (retryCount < maxRetries) {try {print('Reconnecting attempt ${retryCount + 1}...');await client.connect();if (client.connectionStatus?.state == MqttConnectionState.connected) {print('Reconnected successfully.');break;}} catch (e) {print('Reconnect failed: $e');}// 计算下一次重连间隔时间(指数退避)int retryInterval = baseRetryInterval * (2 << retryCount);await Future.delayed(Duration(seconds: retryInterval));retryCount++;}}// 关闭Future<void> close() async {try {// 重新订阅client.unsubscribe('订阅地址');} catch (e, s) {LoggerHelper.fatal(e, s);}client.disconnect();}// Subscribed callbackvoid onSubscribed(String topic) {print('订阅成功,主题为: $topic');}// Subscribed failed callbackvoid onSubscribeFail(String topic) {print('订阅失败,主题为: $topic');}// Unsubscribed callbackvoid onUnsubscribed(String? topic) {print('Unsubscribed topic: $topic');}// Ping callbackvoid pong() {print('调用Ping响应客户端回调');}
}

  • 创建一个全局的客户端对象

final client = MqttServerClient('请求地址', '');
  •  配置客户端对象

      client.setProtocolV311();client.logging(on: true);client.port = 443; // 端口号client.keepAlivePeriod = 60;client.websocketProtocols = ['mqtt'];client.useWebSocket = true;  // 因为我们这里使用的是wss协议所以加这个,这个根据自己的需求来定是否需要client.onConnected = onConnected;client.onDisconnected = onDisconnected;client.onUnsubscribed = onUnsubscribed;client.onSubscribed = onSubscribed;client.onSubscribeFail = onSubscribeFail;client.pongCallback = pong;client.connectTimeoutPeriod = 60;
  • 设置连接消息
 final connMess = MqttConnectMessage().authenticateAs("用户名", "密码").withClientIdentifier('Mqtt_MyClientUniqueId').withWillTopic('willtopic').withWillMessage('My Will message').startClean().withWillQos(MqttQos.atLeastOnce);client.connectionMessage = connMess;
  •  连接(异步)

 try {print('Connecting');await client.connect();} catch (e) {print('Exception: $e');client.disconnect();}
  • 监听接受的消息

 client.updates!.listen((List<MqttReceivedMessage<MqttMessage?>>? c) async {final recMessage = c![0].payload as MqttPublishMessage;final payload = MqttPublishPayload.bytesToStringAsString(recMessage.payload.message);print('Received message:$payload from topic: ${c[0].topic}');});
  • 发送消息 

Future<void> sendMessage() async {if (client.connectionStatus?.state == MqttConnectionState.connected) {final builder = MqttClientPayloadBuilder();var payloadObject = {'MsgData': "发送成功啦"};print("发送的信息:${json.encode(payloadObject)} ");builder.addUTF8String(json.encode(payloadObject));client.publishMessage('发送消息的订阅地址', MqttQos.atLeastOnce, builder.payload!);}}
  • 监听连接状态和订阅的回调

// Connected callbackvoid onConnected() {print("已连接");try {// 连接后订阅client.subscribe('订阅地址', MqttQos.atLeastOnce);} catch (e, s) {LoggerHelper.fatal(e, s);}}// Disconnected callbackvoid onDisconnected() async {print('已断开');final SharedPreferences prefs = await SharedPreferences.getInstance();String? token = prefs.getString('token');if (token != null) {reconnect();}}Future<void> reconnect() async {print("重连中");int retryCount = 0;const maxRetries = 10;const baseRetryInterval = 2; // 初始重连间隔时间(秒)while (retryCount < maxRetries) {try {print('Reconnecting attempt ${retryCount + 1}...');await client.connect();if (client.connectionStatus?.state == MqttConnectionState.connected) {print('Reconnected successfully.');break;}} catch (e) {print('Reconnect failed: $e');}// 计算下一次重连间隔时间(指数退避)int retryInterval = baseRetryInterval * (2 << retryCount);await Future.delayed(Duration(seconds: retryInterval));retryCount++;}}// 关闭Future<void> close() async {try {// 重新订阅client.unsubscribe('订阅地址');} catch (e, s) {LoggerHelper.fatal(e, s);}client.disconnect();}// Subscribed callbackvoid onSubscribed(String topic) {print('订阅成功,主题为: $topic');}// Subscribed failed callbackvoid onSubscribeFail(String topic) {print('订阅失败,主题为: $topic');}// Unsubscribed callbackvoid onUnsubscribed(String? topic) {print('Unsubscribed topic: $topic');}// Ping callbackvoid pong() {print('调用Ping响应客户端回调');}

http://www.hkea.cn/news/565249/

相关文章:

  • wordpress邮件订阅seo技术外包
  • 深圳营销网站建站公司搜索引擎关键词的工具
  • 做网站如何网站考虑优化游戏推广员是诈骗吗
  • 公众号做视频网站吗关键词排名怎么做上首页
  • 重庆做网站价格优化软件下载
  • 如何做网站镜像今日最火的新闻
  • 水果网站开发所需的成本市场营销实际案例
  • 无锡市新吴区住房和建设交通局网站西安百度关键词包年
  • 网站平台方案设计seo上首页
  • 郑州做网站的联系方式搜狗友链交换
  • 一般建设一个网站多少钱怎么接广告赚钱
  • 计算机专业网站开发方向销售推广方案
  • 上海网站建设公司排名西安百度公司
  • 中国网网址是多少网站推广优化教程
  • 关于加强机关网站建设运营培训
  • dw做的网站怎么让别人看到如何建立一个网站
  • 保险网站建设优缺点seo代码优化步骤
  • 如何快速建网站百度电脑版入口
  • 山东省建设工程信息网站最近最新的新闻
  • 免费网站建设方案锦绣大地seo官网
  • 电子商务的网站建设牛排seo系统
  • 资源收费网站怎么做网站快速优化排名官网
  • 招标网哪个网站信息可靠百度站长工具网站
  • 郑州七七网站建设互联网推广公司
  • 佛山做外贸网站代理商百度收录技术
  • 公司网站建设需要什么今日热搜第一名
  • 烟台建设企业网站网站快速收录入口
  • 怎么做繁体字网站网络营销公司注册找哪家
  • 做ppt介绍网站吗网站搜索引擎优化工具
  • 深圳网站建设有没有市场百度搜索推广的五大优势