如何更改MQTT keepAlive(handshake)Golang中的客户端和代理之间的时间间隔?

问题描述:

我是GO和MQTT的新手。在我启动客户端c:= MQTT.NewClient(opts)c.Start()后,每隔30秒断开连接。客户和经纪人之间的握手流量出现了。我只需要调整此间隔或取消握手。如何更改MQTT keepAlive(handshake)Golang中的客户端和代理之间的时间间隔?

keepAlive'握手'是必需的,它不能被禁用,它是经纪人如何知道客户端仍然连接。

在将opts对象传递给NewClient方法之前,您可以通过调用SetKeepAlive来更改保持活动超时。

该方法以每秒keepAlive数据包之间的时间为单位,以秒为单位。

使用示例代码here,您可以添加一行这样的行,将KeepAlive超时设置为30秒。

... 
    opts := MQTT.NewClientOptions().SetBroker("tcp://iot.eclipse.org:1883") 
    opts.SetClientId("go-simple") 
    opts.SetTraceLevel(MQTT.Off) 
    opts.SetDefaultPublishHandler(f) 
    opts.SetKeepAlive(30) 

    //create and start a client using the above ClientOptions 
    c := MQTT.NewClient(opts) 
    _, err := c.Start() 
    if err != nil { 
    panic(err) 
    } 
    ... 
+0

我想你会想'opts.SetKeepAlive(30 * time.Second)'因为它需要一个'time.Duration',(裸30可能会*30纳秒,这本身本身可能是客户端 - 或服务器端解释为“从不”或“默认”或“最小值”,如5秒钟或其他)。这是一个古老的答案,所以也许界面可能会从秒数左右变成'time.Duration'。 – 2016-05-09 15:00:22

+0

@hardillb您可以通过将keepAlive握手设置为零来禁用握手,请参见:http://www.hivemq.com/blog/mqtt-essentials-part-10-alive-client-take-over – Yohst 2017-05-24 15:09:15