2016-04-21 84 views

回答

0

需要对一些事物的网络环路:

  1. 为了应对收到的消息
  2. 要发送永葆
  3. 要处理需要额外的数据包连接所需的Ping报文高QOS
  4. 发送该占用多于一个的网络分组(比本地MTU大例如)消息

只有在消息速率较低(每个存活期间少于1 msg)时才需要ping消息。

鉴于你可以在一个单独的线程在后台启动网络环路这些日子里,我会建议无论

0

启动它为了扩大在什么@hardillb说了一下,他的观点2“送平安只有当您发布的速率不足以与您在连接时设置的Keepalive相匹配时,才需要保持连接处于活动状态所需的数据包“。换句话说,客户完全有可能永远不需要发送PINGREQ,因此永远不需要接收PINGRESP。

但是,更重要的一点是,不可能保证调用publish()将实际完成发送消息而不使用网络循环。它可能在某些时候有效,但可能无法在任何时候完成发送消息。

客户端的下一个版本将允许你这样做:

m = mqttc.publish("class", "bar", qos=2) 
m.wait_for_publish() 

但这将要求,网络环路是在一个单独的线程进行处理,与loop_start()

+0

我将继续按照建议使用网络回路。但是请注意,有很多浮动在网上的例子(在教程等中)不使用它。也许还没有让足够多的人受到伤害。不知道是否默认应该启动它,并强制人们手动关闭它。现在是什么颠倒了。 – fickas

+0

是的,很多人没有阅读文档:(我不打算通过改变行为来打破向后兼容性,对于不处理循环的人来说,它只会是一个恼人的偶然错误。 – ralight