コンテンツにスキップ
JavaScript & WebSocket

JavaScript & WebSocket

JavaScriptクライアントでは、MQTT.jsのGitHubリポジトリのMQTT.jsライブラリを使用します。

Node.js

mqtt.jsライブラリをインストールします。

npm install mqtt --save

main.jsファイルを作成します。

const mqtt = require("mqtt");

const client = mqtt.connect("mqtt://127.0.0.1:5653", {
    clean: true,
    connectTimeout: 3000,
    autoUseTopicAlias: true,
    protocolVersion: 5,
});

client.on("connect", () => {
    client.subscribe("db/reply/#", (err) => {
        if (!err) {
            const req = {
                q: "SELECT * FROM example where name = 'neo_cpu.percent' limit 3",
                format: "box",
                timeformat: "default",
                tz: "local",
                precision: 2
            };
            client.publish("db/query", JSON.stringify(req));
        }
    });
});

client.on("message", (topic, message) => {
    console.log(message.toString());
    client.end();
});

nodeコマンドでmain.jsを実行します。

$ node main.js

+-----------------+-------------------------+-------+
| NAME            | TIME                    | VALUE |
+-----------------+-------------------------+-------+
| neo_cpu.percent | 2024-09-06 14:46:19.852 | 69.40 |
| neo_cpu.percent | 2024-09-06 14:46:22.853 | 26.40 |
| neo_cpu.percent | 2024-09-06 14:46:25.852 | 42.80 |
+-----------------+-------------------------+-------+

WebSocket

Machbase Neo v8.0.28以降は、WebSocket経由のMQTTに対応しています。

プロジェクトにMQTT.jsを組み込むには、以下のCDNスクリプトタグを追加します。

<script src="https://unpkg.com/mqtt/dist/mqtt.min.js"></script>

既定のWebSocketエンドポイントは、Machbase NeoのHTTPサーバーが提供するws://127.0.0.1:5654/web/api/mqttです。

<html>

<head>
    <script src="https://unpkg.com/mqtt/dist/mqtt.min.js"></script>
</head>

<body>
    <script type="text/javascript">
        const url = 'ws://localhost:5654/web/api/mqtt'

        // MQTTクライアントのインスタンスを作成します。
        const options = {
            // クリーンセッション
            clean: true,
            connectTimeout: 4000,
        }
        const client = mqtt.connect(url, options)
        client.on('connect', function () {
            console.log('Connected')
            // クエリ結果を受信するために'db/reply'トピックを購読します。
            client.subscribe('db/reply', function (err) {
                if (!err) {
                    // 'db/query'トピックにクエリを発行します。
                    const req = {q: "SELECT * FROM example limit 10", format:"box", precision: 2}
                    client.publish('db/query', JSON.stringify(req))
                }
            })
        })

        // メッセージを受信します。
        client.on('message', function (topic, message) {
            // 受信したメッセージを画面に表示します。
            document.getElementById("rspQuery").innerHTML = '<pre>'+message.toString()+'</pre>'
            client.end()
        })

    </script>
    <div id="rspQuery"></div>
</body>

</html>
最終更新日