配置MQTT

MQTT

快速上手

# 安装Broker服务
apt install mosquitto mosquitto-clients

# 启动服务
mosquitto

# (tty1)阻塞订阅一个主题
mosquitto_sub -t "test/topic" -v

# (tty2)向指定主题发布一个事件
mosquitto_pub -t "test/topic" -m "hello world"

源码安装mosquitto

编译前环境准备。

apt install cmake gcc g++ ninja-build
TARGET_PREFIX="${HOME}/applications/mosquitto"
mkdir -p $TARGET_PREFIX

# cJSON
cmake -G Ninja \
	-DCMAKE_BUILD_TYPE=Release \
	-DCMAKE_INSTALL_PREFIX=$TARGET_PREFIX \
	-B build_cache -S .
cmake --build build_cache/
cmake --install build_cache/

# libwebsockets
cmake -G Ninja \
	-DCMAKE_BUILD_TYPE=Release \
	-DCMAKE_INSTALL_PREFIX=$TARGET_PREFIX \
	-B build_cache -S .
cmake --build build_cache/
cmake --install build_cache/

# mosquitto
cmake -G Ninja \
	-DCMAKE_BUILD_TYPE=Release \
	-DCMAKE_INSTALL_PREFIX=$TARGET_PREFIX \
	-DCMAKE_PREFIX_PATH=$TARGET_PREFIX \
	-DDOCUMENTATION=OFF \
	-DWITH_WEBSOCKETS=ON \
	-B build_cache -S .
cmake --build build_cache/
cmake --install build_cache/

配置Broker

mosquitto.conf

allow_anonymous  true

listener 1883
protocol mqtt

listener 1884
protocol websockets
# 启动服务
./mosquitto -c ../etc/mosquitto/mosquitto.conf 

SDK调用接口

Python

下载 paho-mqtt 或从软件源安装:

apt install python3-paho-mqtt

demo-mqtt.py

#!/bin/python3
import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, rc):
    print("Connected with result code "+str(rc))
    client.subscribe("test/topic")
    client.publish("test/topic", "Hello Python")

def on_message(client, userdata, msg):
    print(msg.topic+" "+str(msg.payload))

client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message

client.connect("127.0.0.1", 1883, 60)
client.loop_forever()

NodeJs/WebJs

下载 MQTT.jsWeb 中使用,或使用npm安装模块:

npm install mqtt

demo-mqtt.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <title>MQTT</title>
    </head>
    <body>
        <script src="https://unpkg.com/mqtt@4.3.7/dist/mqtt.min.js"></script>
        <script>
            console.log(mqtt);
            const client = mqtt.connect("ws://127.0.0.1:1884");
            client.on("connect", function () {
                client.subscribe("test/topic", function (err) {
                	client.publish("test/topic", "Hello WebJs");
                });
            });
            client.on("message", function (topic, message) {
                // message is Buffer
                console.log(message.toString());
                // client.end();
            });
        </script>
    </body>
</html>

Java

// ...

C

使用 Eclipse Paho CEclipse Paho Embedded C 进行连接。

编译Eclipse Paho C

cmake -G Ninja \
	-DCMAKE_BUILD_TYPE=Release \
	-DCMAKE_INSTALL_PREFIX=$HOME/3rdparty/paho.mqtt.c \
	-B build_cache -S .
cmake --build build_cache/
cmake --install build_cache/

使用Eclipse Paho C

demo-mqtt.c

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

#include "MQTTClient.h"

#define ADDRESS     "tcp://127.0.0.1:1883"
#define CLIENTID    "emqx_test"
#define TOPIC       "test/topic"
#define PAYLOAD     (char*)"Hello World!"
#define QOS         1
#define TIMEOUT     10000L

int main(int argc, char* argv[])
{
    MQTTClient client;
    MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;
    MQTTClient_message pubmsg = MQTTClient_message_initializer;
    MQTTClient_deliveryToken token;
    int rc;

    MQTTClient_create(&client, ADDRESS, CLIENTID, MQTTCLIENT_PERSISTENCE_NONE, NULL);
    // MQTT 连接参数
    conn_opts.keepAliveInterval = 20;
    conn_opts.cleansession = 1;

    if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS) {
        printf("Failed to connect, return code %d\n", rc);
        exit(-1);
    }

    // 发布消息
    pubmsg.payload = PAYLOAD;
    pubmsg.payloadlen = strlen(PAYLOAD);
    pubmsg.qos = QOS;
    pubmsg.retained = 0;
    MQTTClient_publishMessage(client, TOPIC, &pubmsg, &token);
    printf("Waiting for up to %d seconds for publication of %s\n"
            "on topic %s for client with ClientID: %s\n",
            (int)(TIMEOUT/1000), PAYLOAD, TOPIC, CLIENTID);
    rc = MQTTClient_waitForCompletion(client, token, TIMEOUT);
    printf("Message with delivery token %d delivered\n", token);

    // 断开连接
    MQTTClient_disconnect(client, 10000);
    MQTTClient_destroy(&client);
    return rc;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值