mosquitto mqtt broker не будет отправлять подписчику более 20 пакетов публикации

#python #networking #mqtt #mosquitto

#питон #создание сетей #mqtt #москито

Вопрос:

В настоящее время я работаю над клиентом MQTT с использованием python и дошел до того, что могу создавать клиентов, которые публикуют и подписываются на Mosquitto broker.

Проблема в том, что, несмотря ни на что, брокер mosquitto отправит клиенту-подписчику не более 20 пакетов публикации, даже если он остается подключенным в течение длительного периода времени.

Как я могу настроить mosquitto на отправку более 20 пакетов публикации клиенту-подписчику?

Комариное бревно:

 1608918436: Received PUBLISH from publisher (d1, q1, r0, m1, '/OS', ... (3 bytes))
1608918436: Sending PUBLISH to subscriber (d0, q1, r0, m17, '/OS', ... (3 bytes))
1608918436: Sending PUBACK to publisher (m1, rc0)
1608918438: Received PUBLISH from publisher (d1, q1, r0, m1, '/OS', ... (3 bytes))
1608918438: Sending PUBLISH to subscriber (d0, q1, r0, m18, '/OS', ... (3 bytes))
1608918438: Sending PUBACK to publisher (m1, rc0)
1608918440: Received PUBLISH from publisher (d1, q1, r0, m1, '/OS', ... (3 bytes))
1608918440: Sending PUBLISH to subscriber (d0, q1, r0, m19, '/OS', ... (3 bytes))
1608918440: Sending PUBACK to publisher (m1, rc0)
1608918442: Received PUBLISH from publisher (d1, q1, r0, m1, '/OS', ... (3 bytes))
1608918442: Sending PUBLISH to subscriber (d0, q1, r0, m20, '/OS', ... (3 bytes))
 

на этом этапе брокер mosquitto не будет отправлять больше пакетов подписчику, за исключением PINGRESP, когда клиент-подписчик отправляет PINGREQ, чтобы оставаться подключенным к брокеру.

 1608918442: Sending PUBACK to publisher (m1, rc0)
1608918442: Received PINGREQ from subscriber
1608918442: Sending PINGRESP to subscriber
1608918444: Received PUBLISH from publisher (d1, q1, r0, m1, '/OS', ... (3 bytes))
1608918444: Sending PUBACK to publisher (m1, rc0)
1608918446: Received PUBLISH from publisher (d1, q1, r0, m1, '/OS', ... (3 bytes))
1608918446: Sending PUBACK to publisher (m1, rc0)
 

Я буду рад предоставить код для клиента, если это действительно необходимо.

Более позднее редактирование: возможно, стоит упомянуть
, что если в одной теме больше подписчиков, такое поведение не наблюдается, брокер отправляет пакеты без остановки в любой момент.

Ответ №1:

20 сообщений звучит так, как будто вы нажимаете максимальное количество сообщений о полете (максимальное количество неподтвержденных сообщений).

Сообщения относятся к QOS 1, поэтому ваш клиент должен подтвердить их.

Комментарии:

1. это означает, что я неправильно прочитал документацию, поэтому, убедившись, что я понял, подписчику необходимо отправить PUBACK после получения ПУБЛИКАЦИИ?

2. это действительно правильно. Изменил мой клиент-подписчик для отправки PUBACK после получения ПУБЛИКАЦИИ, и «проблема» исчезла.

Ответ №2:

Решил эту проблему, изменив значение max_inflight_messages на 0 в файле mosquitto.conf.

Комментарии:

1. Это неправильное решение, вам нужно исправить подтверждение сообщений

Ответ №3:

У меня было другое решение точно такой же ситуации:

В моем издателе я не написал «client.loop_start ()» и «client.loop_stop ()» вокруг сообщения публикации. Добавление этих двух строк решило проблему.