console.log("onConnect");
client.subscribe("ny-power/computed/co2");
client.subscribe("ny-power/archive/co2/24h");
client.subscribe("ny-power/upstream/fuel-mix/#");
}
// called when a message arrives
function onMessageArrived(message) {
console.log("onMessageArrived:"+message.destinationName + message.payloadString);
if (message.destinationName == "ny-power/computed/co2") {
var data = JSON.parse(message.payloadString);
$("#co2-per-kwh").html(Math.round(data.value));
$("#co2-units").html(data.units);
$("#co2-updated").html(data.ts);
}
if (message.destinationName.startsWith("ny-power/upstream/fuel-mix")) {
fuel_mix_graph(message);
}
if (message.destinationName == "ny-power/archive/co2/24h") {
var data = JSON.parse(message.payloadString);
var plot = [
{
x: data.ts,
y: data.values,
type: 'scatter'
}
];
var layout = {
yaxis: {
title: "g CO2 / kWh",
}
};
Plotly.newPlot('co2_graph', plot, layout);
}
上述應用訂閱了不少主題,因為我們將要呈現若干種不同類型的數據;其中 ny-power/computed/co2 主題為我們提供當前二氧化碳排放的參考值。一旦收到該主題的新消息,網站上的相應內容會被相應替換。
ny-power/archive/co2/24h 主題提供了時間序列數據,用於為 Plotly 線表提供數據。ny-power/upstream/fuel-mix 主題提供當前燃料組成情況,為漂亮的柱狀圖提供數據。
這是一個動態網站,數據不從服務器拉取,而是結合 MQTT 消息總線,監聽對外開放的 WebSocket。就像數據泵和打包器程序那樣,網站頁面也是一個發佈訂閱客戶端,只不過是在你的瀏覽器中執行,而不是在公有云的微服務上。
你可以在 http://ny-power.org 站點點看到動態變更,包括圖像和可以看到消息到達的實時 MQTT 終端。
繼續深入
ny-power.org 應用的完整內容開源在 GitHub 中。你也可以查閱 架構簡介 ,學習如何使用 Helm 部署一系列 Kubernetes 微服務構建應用。另一個有趣的 MQTT 示例使用 MQTT 和 OpenWhisk 進行實時文本消息翻譯, 代碼模式(code pattern)參考 鏈接 。
MQTT 被廣泛應用於物聯網領域,更多關於 MQTT 用途的例子可以在 Home Assistant 項目中找到。
如果你希望深入瞭解協議內容,可以從 mqtt.org 獲得該公開標準的全部細節。
想了解更多,可以參加 Sean Dague 在 OSCON 上的演講,主題為 將 MQTT 加入到你的工具箱 ,會議將於 7 月 16-19 日在奧爾良州波特蘭舉辦。
via: https://opensource.com/article/18/6/mqtt
作者: Sean Dague 選題: lujun9972 譯者: pinewall 校對: wxy
本文由 LCTT 原創編譯, Linux中國 榮譽推出
閱讀更多 Linux中國 的文章