如何更改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)
}
...
我想你会想'opts.SetKeepAlive(30 * time.Second)'因为它需要一个'time.Duration',(裸30可能会*30纳秒,这本身本身可能是客户端 - 或服务器端解释为“从不”或“默认”或“最小值”,如5秒钟或其他)。这是一个古老的答案,所以也许界面可能会从秒数左右变成'time.Duration'。 – 2016-05-09 15:00:22
@hardillb您可以通过将keepAlive握手设置为零来禁用握手,请参见:http://www.hivemq.com/blog/mqtt-essentials-part-10-alive-client-take-over – Yohst 2017-05-24 15:09:15