- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试设置一个 MQTT 服务器,它将客户端发送的消息保存到本地数据库中。每条消息都有一个“成功接收”标志,当接收客户端为收到的每条消息 (QOS = 1) 返回一个 puback 时,我想翻转该标志。
问题是:
当我发布消息时,服务器会正确地从接收客户端接收回 puback。但是,messageId 与来自发布客户端的数据包的不同。我知道这是有意为之。但是我将无法在 DB 中找到正确的消息来翻转标志。如果客户端 A 背对背向客户端 B 发送 2 条 QOS = 1 的消息怎么办?服务器如何区分返回的 2 个 puback?
也许 MQTT 客户端正在做一些神奇的事情来映射我丢失的 messageIds?
我正在使用 mqttjs 和 paho mqttv3 顺便说一句。
最佳答案
QoS 1 或 2 的 MQTT PUBLISH 消息需要消息 ID 作为数据包的一部分。消息 id 用于标识 PUBACK(或 PUBREC/PUBREL/PUBCOMP 用于 QoS 2)所指的消息。这是一个重要的功能,因为您可能同时“发送”多条消息。
您可能忽略的重要一点是客户端彼此完全分离。这意味着消息 ID 对客户端是唯一的(以及消息流的方向、代理到客户端或客户端到代理)。代理为来自代理的消息生成消息 ID,客户端为来自客户端的消息生成消息 ID;每个方向的消息 ID 都是独立的,因此代理和客户端无需跟踪对方正在做什么。
如果您想跟踪哪些传入消息已发送到所有订阅客户端,则需要跟踪哪些传出消息与传入消息相关,并且仅在收到这些传出消息的所有 PUBACK 后才触发您的数据库.这将告诉您哪些消息已成功发送到在接收消息时订阅的所有客户端。
如果您只想要已发送到代理的所有消息的日志,并且可以假设发送工作正常,那么生活就容易多了。只需在代理主机上创建一个监听“#”主题或您感兴趣的任何内容的客户端,然后使用客户端 on_message() 回调(或您的库管理它的方式)来处理消息并将其存储在数据库中.
关于MQTT:如何知道 puback 用于哪个 msg?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14037302/
注意:这与Determine number of bits in integral type at compile time非常相似,但是这是一个非常简化的版本,所有内容都包含在一个 .cpp 中 编
var err1 = Error('message'); var err2 = new Error('message'); 有什么区别?在 chrome 控制台中查看它们,它们看起来相同。对象上的相同
我有一些 jquery/php 代码,它使用 ajax 调用另一个页面。 var pall_id = $(this).attr('id'); $.ajax({ t
我当时正在开发一个在 Linux 上运行了 20 多年的遗留代码。它有3个模块,由3个不同的人处理。我只能更改一个模块。 现在我的任务是在 Windows 中构建具有最少功能的相同代码。 对于进程间通
public JsonResult Authe(string Email, string Password, bool ? Active) { var x = (from n in db.Au
var err1 = Error('message'); var err2 = new Error('message'); 有什么区别?在 Chrome 控制台中查看它们,它们看起来相同。对象上的相同
!!msg.message && msg.message 和 msg?.message 之间的区别? 第一个是当 msg 未定义时 msg.message 将不会被执行。 第二个是什么意思? 最佳答案
我正在做一个项目,我的队友和我正在讨论哪种方法更好。 在我看来Html msg似乎更通用,所以我认为我们应该尽可能使用它,但我不能给他其他理由。 另外,我来自 React 和 Redux,对我来说看起
您好,问题如下: 假设我们有链接的进程 A 和 B。进程的 A 标志 trap_exit 设置为 true。让 B 进程向 A 发送一个 msg 然后退出: PidA ! 'msg', exit(re
有没有人知道任何 JavaScript 库可以打开现有的 *.msg Outlook 文件,例如创建为模板,并可以使用代码将数据放入主题、任何其他 {} 数据并将其作为新数据保存到磁盘。消息文件? 详
我是 google protobuf 的新手,我想知道以下方法之间有什么不同: 1) foo.mutable_bar()->set_somefield(...) 和 2) nestedmsg = fo
如果我这样调用它,我会看到一个很好的差异: self.assertEqual(a, b) 如果我这样调用它,我只会看到消息: self.assertEqual(a, b, msg) 有没有简单的方法来
我是 akka 的初学者。有人可以向我解释为什么 tell 方法定义如下: receiver.tell(msg, sender); 在我看来,有人向其他人发送消息,在 OOP 中它会这样: sende
目前我的代码有 CString DisplayMessage,我的代码全部使用它在客户端和服务器之间交换 DisplayMessage。现在随着软件走向国际化,我希望 DisplayMessage 具
当我使用 Handler.dispatchMessage(msg) 时,handleMessage(Message msg) 将在新线程上运行,但是当我使用 Handler.sendMessage(
今天我遇到了一个事实,即从子线程调用的 sys.exit() 不会终止主进程。我以前不知道这一点,这没关系,但我需要很长时间才能意识到这一点。如果 sys.exit(msg) 会将 msg 打印到 s
我复制了 rabbitmq go example 并稍作改动以进行测试。 Example URL .正常工作 代码结构: func main() { //dial rabbit serve
我正在阅读 Java 9 中引入的 System.Logger API。我无法理解为什么他们开发了如此奇怪 API: System.Logger { public default void log
msg.chat.id 之间有什么区别和 msg.from.id在 Telegeram 机器人中? 显然,两者都是相同的并且返回用户ID。 bot.sendMessage(msg.chat.id, '
我目前正在学习 elm,我只是偶然发现了 div 返回 Html (String -> Msg) 而不是 Html Msg 的问题。 我收到的错误信息 这个 div 调用产生: Html (Strin
我是一名优秀的程序员,十分优秀!