MQTT over Secure Websockets 套接字在一分钟后关闭 - RabbitMQ

Posted

技术标签:

【中文标题】MQTT over Secure Websockets 套接字在一分钟后关闭 - RabbitMQ【英文标题】:MQTT over Secure Websockets Socket Closed After a Minute - RabbitMQ 【发布时间】:2019-03-12 10:39:48 【问题描述】:

我正在通过 Secure Websockets 连接到一个 MQTT RabbitMQ 实例(Angular 6 使用这个模块,import Paho from 'ng2-mqtt/mqttws31')。它连接成功,但套接字连接似乎在一分钟后关闭。 KeepAliveInterval 设置什么并不重要,它似乎总是在一分钟后关闭套接字连接。

这是我的客户端连接:

this.client.connect( userName: "username", password: "password", onSuccess: this.onConnect.bind(this), useSSL: true, timeout: 60, keepAliveInterval: 6000 );

我不确定问题出在 RabbitMQ 服务器还是 Angular 端。任何帮助将不胜感激!

【问题讨论】:

您是否尝试将 keepAliveInterval 设置为小于 60 秒?阅读 Paho 代码表明它会在“keepAliveInterval”秒内向服务器发送 ping,因此服务器可能会在 60 秒不活动后关闭连接。 【参考方案1】:

尝试将您的 keepAliveInterval 设置为 30。

我怀疑你的 MQTT 服务器默认的 keepalive 设置为 60 秒,这意味着如果在这段时间内它没有与客户端进行任何通信,它很可能会在 60 秒后关闭连接。您设置的 keepAliveInterval 字段最多应与服务器的 keepalive 一样大,因为这决定了客户端在安静连接出现时 ping 服务器的频率。

Here 是 MQTT 规范中定义的 KeepAlive。

【讨论】:

完美!我欠你一块巧克力!!!这两天我一直在挠头。只是为了帮助我,你能指导我找到你提到的部分吗?“阅读 Paho 代码表明它会在 'keepAliveInterval' 秒内向服务器发送 ping” 当然 - 从第 700 到 740 行左右见这里。github.com/eclipse/paho.mqtt.javascript/blob/… 顺便说一句,MQTT 的规范说,当服务器在与客户端建立连接后发回确认时,它可以告诉客户端 keepAliveInterval 应该是什么,客户端必须使用此值它最初指定的内容。 JS 中的 Paho 不这样做....关于拉取请求的白日梦 如何增加我的 rabbitMQ-mqtt 服务器的 keepalive?

以上是关于MQTT over Secure Websockets 套接字在一分钟后关闭 - RabbitMQ的主要内容,如果未能解决你的问题,请参考以下文章

在 MQTT 和 MQTT over websocket 的情况下会发生啥?

mqtt使用WebSocket over TLS(wss)握手失败

[mqqt vs mqtt over web native in react native

MQTT over QUIC:下一代物联网标准协议为消息传输场景注入新动力

WSS over Secure SSL 连接仅在 FireFox 上失败,错误 1006

NanoMQ Newsletter 2022-06|规则引擎正式发布 & NanoSDK 支持 MQTT over QUIC