2014-09-19 267 views

回答

4

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

相关问题