我正在研究MQTT协议的性能。我使用Raspberry Pi作为MQTT代理,使用PC作为客户端,两者都连接在同一局域网中。PC向broker发送一条消息,当broker收到消息时,它会发布一条publish.single。当我尝试以qos=2每分钟发送10000条发布消息时,在大约8163条消息后,我在客户端收到以下错误消息:
error: [Errno 10048] Only one usage of each socket address (protocol/network address/port) is normally permitted
我对qos=0和qos=1进行了同样的尝试,但没有出现同样的错误。怎么了?
这很可能是因为您已经耗尽了客户端机器上可用的本地端口数量,因为您有太多的消息在传输。
QOS2消息的开销要大得多(它们需要双向确认)。
使用publish.single方法可能会使情况变得更糟,因为这将为每条消息创建并拆除与代理的完整连接,如果您创建一个持久连接并重用它,事情可能会更好。