blog

フロントエンドMQTTプロトコル

フロントエンドの多くは、このことについて話すとき、とても混乱するかもしれません。私が触ったこともないこれは何?実際には、これはモノのインターネットのためのプロトコルであり、唯一のモノのインターネットプ...

Sep 30, 2020 · 4 min. read

フロンターレの選手の多くは、このようなことになると戸惑ってしまうのではないでしょうか。私が触れたことのないこれは何ですか?実際には、これはモノのインターネットのためのプロトコルであり、唯一のモノのインターネットプロジェクトに連絡するために行うことがあり、多くの情報や最も完全な公式文書ではなく、以下はそれの公式の紹介です!

MQTTはMachine-to-Machine/IoT接続プロトコルです。非常に軽量なパブリッシュ/サブスクライブ・メッセージング・プロトコルとして設計されています。このプロトコルは、小さなコードフットプリントを必要とするリモート接続や、ネットワーク帯域幅が割高な場合に有用であり、制約のあるデバイスや低帯域幅、高遅延、または信頼性の低いネットワーク向けに設計されています。これらの原則により、このプロトコルは、新興の「マシン・ツー・マシン」またはIoTの世界における接続デバイスや、非常に高い帯域幅とバッテリ電力を必要とするモバイル・アプリケーションにも最適です。例えば、衛星リンク経由でエージェントと通信するセンサー、医療プロバイダーへのダイヤルアップ接続、ホームオートメーションや小型デバイスのさまざまなシナリオにすでに使用されています。また、小型、低消費電力、最小限のパケット、1つまたは複数の受信機への効率的な情報配信という点で、モバイル・アプリケーションにも最適です。

  • オープンなメッセージング・プロトコルで実装が容易
  • パブリッシング・サブスクリプション・モデル、1対多のメッセージング
  • TCP/IPネットワーク接続に基づき、整然としたロスレス双方向接続を提供します。
  • 1バイトの固定ヘッダー、2バイトのハートビートメッセージにより、伝送オーバーヘッドとプロトコル交換を最小限に抑え、ネットワークトラフィックを効果的に削減します。
  • メッセージ QoS サポート、保証される信頼できる伝達

実際、プロジェクトにとって最も重要なことは、フロントエンドとバックエンドが意志を送れるかどうか?意志とは何ですか?

簡単に言えば、フロントエンドは、接続のためのバックエンドのテーマにサブスクライブしてから、バックエンドは、フロントエンドにメッセージを送信することができますWebソケットの長い接続に似て、フロントエンドが突然オフラインになった場合、バックエンドは、接続アイドル時間が対応する時間を超えて検出され、サーバーは、遺言のフロントエンドを格納し、その後、遺言、プロフェッショナリズムの少しを有効にすると言うことです。

キープアライブは最大接続アイドル時間Tを指定し、クライアントは接続アイドル時間がTを超えたことを検出すると、ハートビートメッセージPINGREQをブローカに送信する必要があり、ブローカはハートビート要求を受信し、ハートビート応答PINGRESPを返します。 ブローカはハートビート要求を1.5T時間以上受信しない場合、接続を切断し、サブスクライバに遺言メッセージを配信します。同様に、クライアントがハートビート応答PINGRESPを一定時間以上まだ受信する場合、接続を切断します。ブローカは、ハートビート要求を1.5T時間以上受信しない場合、接続を切断し、サブスクライバにプロベート・メッセージを配信します。

これがコードです:

​// #ifdef H5 import mqtt from 'mqtt' // #endif // #ifdef MP- APP-PLUS import mqtt from '../../node_modules/mqtt/dist/mqtt.min.js' // #endif function mqttRequest({ url, port, mac, userName = "", passWord = "", payload }) { let agreement; //1. // #ifdef H5 agreement = "ws://" // #endif // #ifdef MP- APP-PLUS agreement = "wx://" // #endif // 2. url = `${agreement}${url}`; console.log(url) // 4.プロトコルの規則では、userNameを渡す必要がある。: 'admin',password: 'password', let client = mqtt.connect(url, { port: port, username: userName, clean: true, // コールバックを保持する // connectTimeout: 4000, // タイムアウト password: passWord, mac: mac, keepalive:10, keepAliveInterval: 4, // // timeout: 6, //タイムアウト connectTimeout: 4000, // タイムアウト reconnect: true, //自動再接続 will: { topic: 'error', payload: payload, retain: false, qos: 0, }, }) return client } export { mqttRequest } /* client.on('connect', function() { console.log('on connect'); 接続に し、スレッドを購読する client.subscribe(["send","close","gg"]); console.log('サブスクリプション成功'); client.on(message("reg","{msg:nihao}")) function(err) { if (!err) { // console.log(" ") // client.publish('client', 'hello mqtt'); } } }) .on('reconnect', function() { console.log('on reconnect'); }) .on('error', function(err) { console.log(err) console.log('on error'); }) .on('end', function() { console.log('on end'); }) .on('message', function(topic, message) { console.log("Accept、トピック" + topic + ",メッセージの内容" + message) }) .on('offline', function() { client.publish('close', 'close mqtt'); }); */​ this.client .on('connect', function() { // 接続に成功し、スレッドを購読する that.client.subscribe([`topic/${mac}`, 'register'], function(err) { if (!err) { console.log('成功'); that.client.publish('register', JSON.stringify(param)); } }); console.log('サブスクリプション成功:topic'); }) .on('reconnect', function() { console.log('再接続する'); }) .on('error', function(err) { console.log(err); }) .on('message', function(topic, res) { res =[res].join() let data = JSON.parse(res); if (data.code == 200 && topic == `topic/${that.mac}`) { });

これだけです。 その他の設定については、公式ドキュメントをご覧ください。

Read next

Linuxシステムノート コンテナ化

1台の物理マシンから多数の仮想マシンを仮想化することで、リソースの作成に柔軟性が生まれます。しかし、仮想化のアプローチはまだ非常に複雑であることもわかるでしょう。子会社を設立しに行くようなもので、会社は小さいと言われていますが、結局のところ、どこかの独立した会社で、雀の涙ほどで、すべての臓器、したがって、前の章で見たように、CPU、メモリ、ネットワーク、ハードディスクをすべて仮想化する必要があります、、、。

Sep 29, 2020 · 10 min read