WebSocketクライアントを使ってMQTTサーバを接続する
9066 ワード
https://www.jianshu.com/p/4fd95cae1a9c
https://github.com/mqttjs/MQTT.js/tree/master/examples
firecat注:
私たちはemq自身のDashboardプラグインを使用して、websocketのデバッグを行い、Googleブラウザを開いてURLを入力します。192.168.3.128はemqのあるIPアドレスです。
http://192.168.83.128:18083/#/websocket
ユーザ名:admin、パスワード:public
WebSocket URI:ws(s):/192.168.8.3.128:8083/mqtt
TCP URI:tcp://192.168.83.128:1883
概要
近年では、Webの急速な発展に伴って、ブラウザの新機能が次々と現れ、ブラウザの端やブラウザのレンダリングエンジンによって実現できるアプリケーションが増えてきました。Webアプリケーションのインスタント通信方式WebSocketは、広く応用されています。
WebSocketは単一のTCP接続上で全二重通信を行うプロトコルである。WebSocket通信プロトコルは2011年にIETFによって標準RFC 6455に定められ、RFC 7936によって規範を補充する。WebSocket APIもW 3 Cに標準化されています。
WebSocketは、クライアントとサーバとの間のデータ交換をより簡単にし、サービス端末がクライアントにデータを積極的に転送することを可能にする。WebSocket APIでは、ブラウザとサーバは握手を一度だけ行う必要があり、両者の間には持続的な接続を直接作成し、双方向のデータ伝送を行うことができる。ウィキペディアWebSocketから
MQTTプロトコル第6章では、MQTTがWebSocket[RFC 6455]に接続して送信するために必要な条件を詳細に約束しました。プロトコル内容EMQはここで疲れません。プロトコルの詳細がより複雑なため、本明細書ではよく使われるJavaScript MQTTクライアントを2つ選んで接続テストを行う。
二つのクライアントの比較
Paho.mqtt.js
PahoはEclipseのMQTTクライアントプロジェクトであり、Paho JavaScript Cientはブラウザベースのライブラリであり、それはWebSocketsを使ってMQTTサーバに接続されている。他のJavaScript接続ライブラリに比べて機能が少なく、使用を推奨しません。
MQTT.js
MQTT.js MQTTプロトコルのクライアントライブラリは、JavaScriptで作成され、Node.jsとブラウザに使用できます。Node.jsでは、グローバルインストールによりコマンドライン接続が可能であり、MQTT、MQTT TLS証明書接続もサポートされています。言及に値するのはMQTT.jsで、微信小プログラムに対してもいい支持があります。
EMQ君はMQTT.jsライブラリで接続解説を行います。
MQTT.jsの取り付け
読者機器にNode.jsの稼働環境がある場合は、npm命令でMQTT.jsをインストールすることができます。
現在のディレクトリにインストール
登録
CDN参照
MQTT.jsパッケージは通過できます。http://unpkg.com 獲得する
いくつかの共通のWebSocketテスト接続サーバ: test.mosquitto.org-ポート8080を使用して暗号化されていません。8081はSSL上のWebSocketに使用されます。 iot.eclipse.org-ポート80を使用して暗号化されておらず、443はSSL上のWebSocketに使用される。 brook er.hivemq.com-ポートを使って8000暗号化されていません。SSL上のWebSocketはサポートされていません。 クライアント認証の一部の内容を示す必要があるので、上記サーバはクライアント認証サービスを提供していません。筆者はActorCloudプラットフォームを通じて一つの装置を登録して接続します。
EMQは8083ポートを使用して一般的な接続に用い、8084はSSL上のWebSocket接続に用いられる。
の な アドレスは、 アドレスが されていないプロトコル:WebSocketは、プロトコル として アドレスが されていないポート:MQTTはWebSocketアクセスポートに されていません。EMQでは、デフォルトでは アドレスにパスがない:MQTT-WebSoketは に プロトコルはポートと していません。 HTTPSで WebSocket を する:Googleなどの はHTTPSを すると に、ブラウザ によってセキュリティ を っている。つまりHTTPS では、ブラウザは に は アドレスと していません。 が いので、 は のEMQでSSL/TLS が です。 のオプション
のコードの で、 keepalive: 、デフォルトでは60 、0を に します。 clientId:クライアントID、デフォルトは username: ユーザ (あれば) password: パスワード(あれば) clean:trueはfalseに され、オフライン にQoS 1および2メッセージを する。 reconnectPeriod:デフォルトでは1000ミリ 、2 の の の 、クライアントIDの 、 などのクライアントが されます。 connectTimeout:デフォルトでは30×1000ミリ 、CONNAACKを する に つ 、すなわち のタイムアウト 。 /キャンセル
が してから することができます。また、 のテーマはMQTT のテーマ に していなければなりません。
JavaScriptの ブロッキング は、クライアントが に したかどうか、または
あるテーマにメッセージを ります。 されたテーマはMQTTのテーマルールに していなければなりません。リリース にこのテーマを する はありませんが、クライアントが に したことを します。
MQTT.jsライブラリは、WeChatウィジェットに して な を い、
EMQはSSL/TLS を にします。
EMQは を しており、デフォルトではすでに されたWebSocket が していますが、ほとんどのブラウザは の エラーを します。 えば
この のhttpsの れと の で の を しく しました。EMQ がSSL/TLS をまとめるには な は の りです。ドメイン をEMQサーバのパブリックネットワークアドレスに び けます。CA が した の はドメイン に するものです。 を する:CA にドメイン の を し、 できるCA を し、 はドメイン とホスト を しなければならない。 は を する EMQに する
あなたの を って ファイルと にETC/certs/ に き えることができます。
インバースプロキシと の
nginxを して、 エージェントを して、WebSocketを することで、EMQサーバの を し、ドメイン を しながら、nginxの によって のバックエンドサービスエンティティを り てることができる。
MQTT.jsの の は、 な と の コードを しています。 は に くことができます。
EMQ DashboardのWebSocketツール、ActorCloudテストツール->MQTTクライアント(ActorCloudショッピングセンター が )は、MQTT.jsを って されています。 は を することができます。
:EMQリンク:https://www.jianshu.com/p/4fd95cae1a9c : の は の になります。いかなる の も に して を て、 を してください。
-----
Vueベースのmqttws 31.js mqttサーバ(WebSocket)
https://github.com/mqttjs/MQTT.js/tree/master/examples
firecat注:
私たちはemq自身のDashboardプラグインを使用して、websocketのデバッグを行い、Googleブラウザを開いてURLを入力します。192.168.3.128はemqのあるIPアドレスです。
http://192.168.83.128:18083/#/websocket
ユーザ名:admin、パスワード:public
WebSocket URI:ws(s):/192.168.8.3.128:8083/mqtt
TCP URI:tcp://192.168.83.128:1883
概要
近年では、Webの急速な発展に伴って、ブラウザの新機能が次々と現れ、ブラウザの端やブラウザのレンダリングエンジンによって実現できるアプリケーションが増えてきました。Webアプリケーションのインスタント通信方式WebSocketは、広く応用されています。
WebSocketは単一のTCP接続上で全二重通信を行うプロトコルである。WebSocket通信プロトコルは2011年にIETFによって標準RFC 6455に定められ、RFC 7936によって規範を補充する。WebSocket APIもW 3 Cに標準化されています。
WebSocketは、クライアントとサーバとの間のデータ交換をより簡単にし、サービス端末がクライアントにデータを積極的に転送することを可能にする。WebSocket APIでは、ブラウザとサーバは握手を一度だけ行う必要があり、両者の間には持続的な接続を直接作成し、双方向のデータ伝送を行うことができる。ウィキペディアWebSocketから
MQTTプロトコル第6章では、MQTTがWebSocket[RFC 6455]に接続して送信するために必要な条件を詳細に約束しました。プロトコル内容EMQはここで疲れません。プロトコルの詳細がより複雑なため、本明細書ではよく使われるJavaScript MQTTクライアントを2つ選んで接続テストを行う。
二つのクライアントの比較
Paho.mqtt.js
PahoはEclipseのMQTTクライアントプロジェクトであり、Paho JavaScript Cientはブラウザベースのライブラリであり、それはWebSocketsを使ってMQTTサーバに接続されている。他のJavaScript接続ライブラリに比べて機能が少なく、使用を推奨しません。
MQTT.js
MQTT.js MQTTプロトコルのクライアントライブラリは、JavaScriptで作成され、Node.jsとブラウザに使用できます。Node.jsでは、グローバルインストールによりコマンドライン接続が可能であり、MQTT、MQTT TLS証明書接続もサポートされています。言及に値するのはMQTT.jsで、微信小プログラムに対してもいい支持があります。
EMQ君はMQTT.jsライブラリで接続解説を行います。
MQTT.jsの取り付け
読者機器にNode.jsの稼働環境がある場合は、npm命令でMQTT.jsをインストールすることができます。
現在のディレクトリにインストール
npm i mqtt
グローバルインストール登録
mqtt
mqtt_pub
mqtt_sub
を現在のユーザに命じる。ここでは、iot.eclipse.org
を介してコマンドラインの使用について説明する。#
npm i mqtt -g
#
$ mqtt sub -t 'hello' -h 'iot.eclipse.org' -v
> hello 09860
# hello,
#
mqtt pub -t 'hello' -h 'iot.eclipse.org' -m 'from MQTT.js'
# -> -> , , hello
> hello from MQTT.js
npmは現在のディレクトリにインストールしても使えます。module/.bin/mqttコマンドは以上の操作を実行します。CDN参照
MQTT.jsパッケージは通過できます。http://unpkg.com 獲得する
// mqtt
console.log(mqtt)
MQTTサーバに接続いくつかの共通のWebSocketテスト接続サーバ:
EMQは8083ポートを使用して一般的な接続に用い、8084はSSL上のWebSocket接続に用いられる。
//
// const mqtt = require('mqtt')
import mqtt from 'mqtt'
//
const options = {
connectTimeout: 4000, //
//
clientId: 'emqx-connect-via-websocket',
username: 'emqx-connect-via-websocket',
password: 'emqx-connect-via-websocket',
}
const client = mqtt.connect('wss://iot.actorcloud.io:8084/mqtt', options)
client.on('reconnect', (error) => {
console.log(' :', error)
})
client.on('error', (error) => {
console.log(' :', error)
})
の な アドレスは、
wss:
/iot
.actorcloud.io
:8084
/mqtt
/
.
:
/
は のようなエラーが やすいです。ws
( )、wss
(SSL )を する プロトコルとして する。MQTT.jsクライアントは のプロトコルをサポートしています。 アドレスはプロトコルのタイプを する があります。8083
8084
を 、 ポートとして しています。WebSocketプロトコルのデフォルトポートはHTTPと しています(80/443)、ポートを しないとWebSocketを ったデフォルトポート が されます。 MQTT を する は、MQTT.jsなどのポートを する はなく、Node.js でmqtt://localhost
を して MQTT 8083ポートに することができ、 アドレスがmqtts://localhost
である は8884ポートに する。/path
を として し、 に が である。wss
を した が8083
ポートに されています。ws
プロトコルを して を することを する。のコードの で、
options
はクライアント のオプションです。 は なパラメータの です。https://www.npmjs.com/package/mqtt#connect。 'mqttjs_' + Math.random().toString(16).substr(2, 8)
によってランダムに されます。が してから することができます。また、 のテーマはMQTT のテーマ に していなければなりません。
JavaScriptの ブロッキング は、クライアントが に したかどうか、または
client.connected
によって が したかどうかを することができる://
client.on('connect', handleConnect)
client.subscribe('hello')
client.publish('hello', 'Hello EMQ')
//
client.on('connect', (e) => {
console.log(' ')
//
client.subscribe('hello', { qos: 1 }, (error) => {
if (!error) {
cosnole.log(' ')
client.publish('hello', 'Hello EMQ', { qos: 1, rein: false }, (error) => {
cosnole.log(error || ' ')
})
}
})
//
client.subscribe(['hello', 'one/two/three/#', '#'], { qos: 1 }, onSubscribeSuccess)
// qos
client.subscribe(
[
{ hello: 1 },
{ 'one/two/three': 2 },
{ '#': 0 }
],
onSubscribeSuccess,
)
})
//
client.unubscribe(
// topic, topic Array, topic Array-Onject
'hello',
onUnubscribeSuccess,
)
メッセージの / あるテーマにメッセージを ります。 されたテーマはMQTTのテーマルールに していなければなりません。リリース にこのテーマを する はありませんが、クライアントが に したことを します。
//
client.on('message', (topic, message) => {
console.log(' ', topic, ' ', message.toString())
})
//
if (!client.connected) {
console.log(' ')
return
}
client.publish('hello', 'hello EMQ', (error) => {
console.log(error || ' ')
})
WeChatアプレットMQTT.jsライブラリは、WeChatウィジェットに して な を い、
wxs
プロトコル を する。 ウィジェット では、 された が です。 アドレスはwxs://iot.actorcloud.io:8084/mqtt
と じです。EMQはSSL/TLS を にします。
EMQは を しており、デフォルトではすでに されたWebSocket が していますが、ほとんどのブラウザは の エラーを します。 えば
net::ERR_CERT_COMMON_NAME_INVALID
(Chrome、360などwebkitカーネルブラウザは モードで、Cosoneタブはほとんどの エラーを できます。)。この のhttpsの れと の で の を しく しました。EMQ がSSL/TLS をまとめるには な は の りです。
wss
プロトコルを し、ドメイン を する:ドメイン - を けた 、IPアドレスではなくドメイン を して しなければならない。このようにブラウザはドメイン によって を し、 した に を することができる。etc/emqx.conf
プロファイルを き、 の を します。# wss
listener.wss.external = 8084
#
listener.wss.external.keyfile = etc/certs/cert.key
#
listener.wss.external.certfile = etc/certs/cert.pem
EMQを すればいいです。あなたの を って ファイルと にETC/certs/ に き えることができます。
インバースプロキシと の
nginxを して、 エージェントを して、WebSocketを することで、EMQサーバの を し、ドメイン を しながら、nginxの によって のバックエンドサービスエンティティを り てることができる。
# WebSocket 443
listen 443, 8084;
server_name example.com;
ssl on;
ssl_certificate /etc/cert.crt; #
ssl_certificate_key /etc/cert.key; #
# upstream
upstream emq_server {
server 10.10.1.1:8883 weight=1;
server 10.10.1.2:8883 weight=1;
server 10.10.1.3:8883 weight=1;
}
#
location / {
root www;
index index.html;
}
# EMQ WebSocket
location / {
proxy_redirect off;
# upstream
proxy_pass http://emq_server;
proxy_set_header Host $host;
#
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr:$remote_port;
# WebSocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection “upgrade”;
}
その の MQTT.jsの の は、 な と の コードを しています。 は に くことができます。
EMQ DashboardのWebSocketツール、ActorCloudテストツール->MQTTクライアント(ActorCloudショッピングセンター が )は、MQTT.jsを って されています。 は を することができます。
:EMQリンク:https://www.jianshu.com/p/4fd95cae1a9c : の は の になります。いかなる の も に して を て、 を してください。
-----
Vueベースのmqttws 31.js mqttサーバ(WebSocket)