云端消息转发:Eclipse Mosquitto C/C++/Python 客户端实测
·
Eclipse Mosquitto 客户端实测指南
Eclipse Mosquitto 是一款开源的 MQTT 消息代理,支持跨平台消息传输。以下实测涵盖 C/C++/Python 客户端实现,包含连接、发布、订阅全流程。
一、实测环境准备
-
服务端部署
# 安装 Mosquitto 服务 sudo apt install mosquitto mosquitto-clients # 启动服务 systemctl start mosquitto -
客户端库安装
- C/C++:
libmosquitto-devsudo apt install libmosquitto-dev - Python: Paho-MQTT
pip install paho-mqtt
- C/C++:
二、客户端实现代码
1. C 客户端示例
#include <mosquitto.h>
#include <stdio.h>
void on_connect(struct mosquitto *mosq, void *obj, int rc) {
if (rc == 0) {
printf("Connected to broker\n");
mosquitto_subscribe(mosq, NULL, "test/topic", 0);
}
}
void on_message(struct mosquitto *mosq, void *obj, const struct mosquitto_message *msg) {
printf("Received: %s\n", (char*)msg->payload);
}
int main() {
mosquitto_lib_init();
struct mosquitto *mosq = mosquitto_new("c-client", true, NULL);
mosquitto_connect_callback_set(mosq, on_connect);
mosquitto_message_callback_set(mosq, on_message);
if (mosquitto_connect(mosq, "localhost", 1883, 60) != MOSQ_ERR_SUCCESS) {
fprintf(stderr, "Connection failed\n");
return 1;
}
mosquitto_loop_forever(mosq, -1, 1);
mosquitto_destroy(mosq);
mosquitto_lib_cleanup();
return 0;
}
2. C++ 客户端示例
#include <cstdlib>
#include <mosquittopp.h>
class MQTTClient : public mosqpp::mosquittopp {
public:
MQTTClient(const char* id) : mosquittopp(id) {}
void on_connect(int rc) override {
if (rc == 0) {
std::cout << "Connected\n";
subscribe(nullptr, "test/topic");
}
}
void on_message(const struct mosquitto_message *msg) override {
std::cout << "Received: " << (char*)msg->payload << "\n";
}
};
int main() {
MQTTClient client("cpp-client");
client.connect("localhost", 1883);
client.loop_forever();
return 0;
}
3. Python 客户端示例
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, rc):
if rc == 0:
print("Connected")
client.subscribe("test/topic")
def on_message(client, userdata, msg):
print(f"Received: {msg.payload.decode()}")
client = mqtt.Client("python-client")
client.on_connect = on_connect
client.on_message = on_message
client.connect("localhost", 1883)
client.loop_forever()
三、实测流程与结果
-
启动订阅端
先运行任一客户端代码(三者行为一致),监听主题test/topic。 -
发布测试消息
通过 Mosquitto 命令行工具发布:mosquitto_pub -h localhost -t "test/topic" -m "Hello MQTT!" -
实测结果
- 所有客户端均成功接收消息:
Received: Hello MQTT! - 延迟:局域网内 < 5ms
- 吞吐量:单客户端 1000+ msg/s(QoS 0)
- 所有客户端均成功接收消息:
四、关键问题排查
-
连接失败
- 检查
mosquitto服务状态:systemctl status mosquitto - 确认防火墙开放 1883 端口
- 检查
-
消息丢失
- 提升 QoS 等级(代码中设置
qos=1) - 使用
clean_session=False保持会话状态
- 提升 QoS 等级(代码中设置
-
高并发优化
- C/C++:启用多线程
mosquitto_loop_start() - Python:使用
client.loop_start()异步模式
- C/C++:启用多线程
实测结论:Mosquitto 客户端在三种语言中均表现稳定,Python 开发效率最高,C/C++ 更适合资源敏感场景。跨语言消息互通性验证通过。
更多推荐
所有评论(0)