【问题标题】:How to configure mosquitto broker to increase the disconnection time to mqtt clients?如何配置 mosquitto 代理以增加与 mqtt 客户端的断开连接时间?
【发布时间】:2018-01-17 22:30:11
【问题描述】:

mqtt文档说明keepalive的最大值是18小时12分15秒。

但是,如果 mosquitto 服务器在 60 秒加上 30 秒的容差(即最多 90 秒)之前没有收到消息,它会断开客户端的连接。

也就是说,我不能配置超过90秒的keepalive。

【问题讨论】:

    标签: mqtt mosquitto paho libmosquitto


    【解决方案1】:

    你没有在broker上配置keep alive,它是在客户端配置的。

    该值是从客户端到代理的连接数据包中传递的(http://docs.oasis-open.org/mqtt/mqtt/v3.1.1/os/mqtt-v3.1.1-os.html#_Keep_Alive

    如何配置取决于您使用的客户端库,但大多数库将其作为配置选项。

    例如对于 libmosquitto,您以秒为单位将 keep alive 值传递给 mosquitto_connect 函数 (https://mosquitto.org/man/libmosquitto-3.html#idm46181896216640)

    int mosquitto_connect(  mosq,    
        host,    
        port,    
        keepalive);      
    struct mosquitto *mosq;
    const char *host;
    int port;
    

    此外,您通常不必发布消息,如果在保持活动期间没有发送/接收消息,客户端库应发送 ping 数据包以保持连接活动。 int 保活;

    【讨论】:

    • 是的,没错,我刚刚用wireshark抓包,观察PING包,keepalive为5min,5分钟后向蚊子服务器发送一个PING,但是PING始终没有到达,导致在 7 分 30 秒时服务器声明连接因超时关闭,我认为问题不是 MQTT 问题是 TCP。
    【解决方案2】:

    是的,60 秒是客户端的默认保活时间。但是在mosquitto.conf中确实存在一个keepalive_interval,即Mosquitto桥接模式,用于将多个mosquitto broker连接在一起。

    【讨论】:

      猜你喜欢
      • 2015-12-23
      • 1970-01-01
      • 2021-09-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多