mqtt - 包含 Mosquitto 服务器时间的“Will message”
问题描述
在 MQTT中, “遗嘱消息”可以由客户端存储在服务器上。当同一个客户端突然断开连接时,它们由服务器发布。为了更容易调试,在“遗嘱消息”中包含日期和时间是有意义的。
目前我正在使用 Paho MQTT 库,我像这样定义“将消息”:
let _dt = {
date: () => {
let _d = new Date();
let _dd = `${_d.toLocaleDateString("en-US")}`;
return _dd;
},
time: () => {
let _d = new Date();
let _dd = `${_d.getHours()}:${_d.getMinutes()}:${_d.getSeconds()}.${_d.getMilliseconds()}`;
return _dd;
},
}
let _will_message = new Paho.MQTT.Message(`Client "${_client_id}" disconnected abruptly ${_dt.date()} at ${_dt.time()}.`);
_will_message.destinationName = `/will_messages`;
_will_message.retained = true;
_will_message.qos = 2;
但这显然不是正确的方式,因为“will message”显示了在客户端创建对象的时间_will_message
!
有没有办法显示 Mosquito 服务器意识到客户端断开连接甚至更好的时间,实际发生断开连接的时间(我们可能需要减去一些超时值)?
解决方案
不,LWT 消息的发布将与创建时设置的内容完全不同。
您应该能够找到客户端与 mosquitto 日志断开连接的时间。
例如
1592604090: Socket error on client mosq-Za0gqtsXkazB5N8Ugt, disconnecting.
1592604238: New connection from 127.0.0.1 on port 1889.
1592604238: New client connected from 127.0.0.1 as mosq-SrUz3EXOh9Bc6huMni (p2, c1, k10).
1592604264: Client mosq-SrUz3EXOh9Bc6huMni has exceeded timeout, disconnecting.
推荐阅读
- aws-lambda - AWS Lambda and AWS SNS: Does it need a NAT Gateway?
- python - Query Builder Application Using Python
- azure - Azure App Insights - 将自定义属性添加到依赖调用
- mysql - 从不同表中的另一列中减去一列以将答案留在 MySQL 的另一列中
- sql - 用于将数据库从 Blob 存储还原到托管实例的 Azure 自定义脚本
- android - 将 Gradle 版本从 4.6 更改为 4.10.1 导致同步失败无效
- .net-core - 如何在 .NET Core 中从 Linux 应用程序操作 Windows 路径,反之亦然?
- haskell - 冗余模式匹配的情况
- dart - 如何通过链接在颤振应用程序中启动视频通话
- html - 动态更改 CSS 类的属性