Demo
プログラムの選択 - MQTT
この記事を始める前に、まず今日の2人の主人公を紹介しましょうᤪ:
主人公その1:インスタント・メッセージング
MQTTの最大の利点は、非常に少ないコード量と限られた帯域幅で、リモートデバイスに接続してリアルタイムかつ信頼性の高いメッセージングサービスを提供できることです。
実際、プロジェクト内にIM機能を実装する場合、複数の選択肢がありますが、なぜMQTTを選ぶのでしょうか?まず第一に、プロジェクトの複数のエンドポイントの整合性を考慮し、プロジェクトの複数のエンドポイントを持って、エンドの1つに正常にアクセスして機能を実装するためにMQTTソリューションを採用しており、その後、複数のエンドポイント間の対話を開くことができるかもしれないので、私も自分のプロジェクト内でMQTTメッセージプッシュソリューションを使用するつもりです。もう一つの重要な理由は、MQTTにはライブラリがあるからです!ライブラリがあります!
MQTT Client
Step1:MQTTAppConnectionState
最初に明確にする必要があるのは、MQTTの接続状態です。この部分を理解するのは簡単で、MQTTで可能な状態は、接続されている、接続されていない、接続されています。このように列挙されています。
enum MQTTAppConnectionState { connected, disconnected, connecting }
非常に良いです!すでに最初のステップを完了し、アイデアが明確になってきています。
Step2:MQTTAppState
MQTTの接続状態を取得した後、他に何が必要でしょうか?接続状態を知る目的は何でしょうか?もちろん、接続が成功したときにメッセージを送受信し、接続が切断されたときにメッセージの送受信を停止し、メッセージを受信したときに受信したメッセージを知るためです。これが、MQTTAppStateと呼ばれるクラスの必要性です。
class MQTTAppState with ChangeNotifier{
MQTTAppConnectionState _appConnectionState = MQTTAppConnectionState.disconnected;
String _receivedText = '';
String _historyText = '';
void setReceivedText(String text) {
_receivedText = text;
_historyText = _historyText + '
' + _receivedText;
notifyListeners();
}
void setAppConnectionState(MQTTAppConnectionState state) {
_appConnectionState = state;
notifyListeners();
}
String get getReceivedText => _receivedText;
String get getHistoryText => _historyText;
MQTTAppConnectionState get getAppConnectionState => _appConnectionState;
}
このクラスでは、現在の受信メッセージreceivedTextの定義を見ることができますし、メッセージ_ historyTextの履歴を受信し、2つのメッセージを定義し、メッセージの履歴が実際に重畳され、改行のプロセスは、各メッセージの新しい履歴を形成するために新しいメッセージに参加する元のに基づいて、新しいメッセージを受信しました。また、MQTTAppConnectionStateを管理するためのメソッドを定義します!このクラスのはChangeNotifierを継承している、Flutterの学生に精通していることも推測することができます、これは、はい、ここでもProviderの技術ソリューションの後にグローバルな状態管理を容易にすることです。
Step3:MQTTManager
関数やクラスライブラリにアクセスする必要がある場合、まず最初にグローバル管理のアイデアが必要です。そうでないと、FlutterのようなフレームワークではUIとビジネスロジックの区別が難しくなります。ここでのMQTTManagerの目的は、IMメッセージの送受信とメッセージの購読を一元管理することで、グローバルマネージャクラスとして、まず必要なのはコンストラクタを定義することです、コンストラクタは一般的にMQTTに必要な内容のクラスに配置されます、必要なクラスとは?ここでは、MQTTの基本的な理解を持っている必要があり、ここで私は最初にあなたに答えを書きます。
MQTTManager({
@required String host,
@required String topic,
@required String identifier,
@required MQTTAppState state
}
): _identifier = identifier, _host = host, _topic = topic, _currentState = state ;
MQTTのための最も基本的な構成は、ホスト(ホストアドレス)、トピック(サブスクリプションの件名)、識別子(ユーザーID)、状態(接続状態)が含まれています実際には、これらの人々はそれが理解するのは難しいことではありませんについて慎重に考えて、これは、受信者を区別し、メッセージを送受信するために行うことです基本的な構成のいくつかの送信者。
また、MQTTサーバが必要です!、同じサーバの基本的な設定を追加する必要があります
void initializeMQTTClient(){
_client = MqttServerClient(_host,_identifier);
_client.port = 1883;
_client.keepAlivePeriod = 20;
_client.onDisconnected = onDisconnected;
_client.secure = false;
_client.logging(on: true);
_client.onConnected = onConnected;
_client.onSubscribed = onSubscribed;
final MqttConnectMessage connMess = MqttConnectMessage()
.withClientIdentifier(_identifier)
.withWillTopic('willtopic') set a will message
.withWillMessage('My Will message')
.startClean()
.withWillQos(MqttQos.atLeastOnce);
_client.connectionMessage = connMess;
}
このような単純なサーバーは、ポート番号、接続保留時間など、彼に良い基本的な設定を与えるために設定されている、すべての情報が設定され、マネージャにいくつかの基本的な管理方法を追加することができます。
MQTT
上記の絶え間ない努力では、次のすべてが論理的であると思われる、文字の手、上のページの知識と組み合わせ。マネージャを介して実装できるMQTT接続
_connectMQTT()
{
manager = MQTTManager(
host: "test.mosquitto.org",
topic: "flutter/amp/cool",
identifier: _userName,
state: currentAppState);
manager.initializeMQTTClient();
manager.connect();
}
同時に、ChangeNaotifierが統合されているので、動的にサブスクライブメッセージを聞くことができます、簡単に、2行のコード。
//現在受信したメッセージ
appState.getReceivedText
//すべての履歴メッセージ
appState.getHistoryText
メッセージの送信も非常に簡単で、1行のコードで完了します!
mqttManager.publish(message);