MQTT客户端ID设计探索

Publish: March 16, 2020 Category: 小技巧 No Comments

客户机标识符是连接到MQTT Broker的每个MQTT客户机的标识符。对于Broker来说每个客户端都应该是唯一的。Broker使用它来标识客户机和客户机的当前状态。默认情况下是自动生成的。如果尝试使用相同的客户机标识符连接两个MQTT客户机,则Broker将拒绝连接。再开发中应该格外注意这件事,请确保您具有唯一的客户机id,否则您的客户机将被代理拒绝并可能显示为脱机。最糟糕的情况是导致重复clientid的客户端莫名的被Broker踢掉。

客户端标识符是一个23字节的字符串,用于标识MQ遥测传输客户端。每个标识符一次只能对一个连接的客户端唯一。标识符只能包含所有权管理器名称中有效的字符。在这些约束中,可以使用任何标识字符串。重要的是要有一个分配标识符的过程,以及一种使用替换识别替换的方法。

根据我的经验来看设计应该从两个方面来考虑:

可变型的clientid

所谓可变,是指客户端只要保证唯一就可以,可能会随着网络、位置、使用场景变更而变更。这类clientid再设计的时候相对简单,最简单的方式就是交由Broker来维护,客户端无需关心。如果客户端需要参与业务,建议使用设备唯一标识+公网地址的方式,尤其是很多硬件厂商,出厂的时候由很多重复唯一标识。这样就避免了很多不必要的问题。

不可变clientid

如何确保客户端标识符是唯一的?此外生成唯一标识符的系统外,还必须有一个可靠的进程来设置客户端上的标识符。也许客户端设备是一个“黑匣子”,没有用户界面。您是否使用正确的标识符(如使用其MAC地址)制造设备?如果客户用新设备替换有故障的设备,新设备是否与旧设备具有相同的标识符?是否分配新的标识符?如果更改物理设备,但保留相同的标识符,则未完成的发布和活动订阅将自动传输到新设备。
可以从48位设备MAC地址创建一个标识符,以保持标识符替换且唯一。如果传输大小不是关键问题,则可以使用剩余的17个字节使地址更容易管理。

Tags: mqtt

Related Posts:

Leave a Comment

Trackbacks/Pingbacks

  1. levitra --- April 17th, 2020 at 08:17 pm
  2. pure cbd oil --- April 26th, 2020 at 09:47 am
  3. cbd vape juice --- April 26th, 2020 at 10:49 am
  4. buy chloroquine phosphate 250mg --- April 28th, 2020 at 11:39 am
  5. viagra 100mg --- April 29th, 2020 at 04:43 am
  6. walmart cialis --- May 2nd, 2020 at 03:51 am
  7. viagra generic --- May 2nd, 2020 at 10:31 pm
  8. cialis coupons printable --- May 7th, 2020 at 08:42 pm
  9. cialis over counter --- May 8th, 2020 at 01:20 am
  10. cialis canada --- May 15th, 2020 at 08:55 am
  11. tadalafil generic --- May 24th, 2020 at 12:47 am
  12. viagra online --- May 29th, 2020 at 08:38 pm