Я тестирую сервер Mosquitto, используя две программы Python. Брокер Mosquitto — это докер на машине с Linux, программы Python работают на моей машине с Windows. Один подписан на тему «Тест» и постоянно слушает и выводит все полученные сообщения на стандартный вывод + добавляет их в лог-файл. Второй отправляет указанное количество сообщений в тему «Тест» так быстро, как только возможно.
Это отлично работает, когда издатель и подписчик используют QoS 0. Однако при использовании QoS 1 для издателя, по-прежнему все сообщения передаются, но только 60-90% сообщений принимаются при использовании ~ 50 сообщений и более. Я также тестировал это со 100, 1000 и 10 000 сообщений - всегда получается около 2/3 сообщений, независимо от количества отправленных сообщений. Кроме того, никакие промежуточные сообщения не отбрасываются, а только те, которые находятся в конце.
Это становится еще хуже при изменении издателя на QoS 2, тогда только 30-50% моих сообщений принимаются абонента.
Уровень QoS моего абонента установлен на 0, изменение его на 1 или 2 ничего не меняет.
Оба скрипта подключены одинаково пользователь.
Я думаю, что система, возможно, не сможет обработать все сообщения так быстро, но почему она не отбрасывает сообщения между ними, а только обрезает их в конец, независимо от количества сообщений?
Вот программа-издатель:
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, reason_code, properties):
print(f"Connected with result code {reason_code}")
broker_hostname = "myhost"
port = 1883
client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)
client.username_pw_set(username="user", password="password")
client.on_connect = on_connect
client.connect(broker_hostname, port)
client.loop_start()
topic = "Test"
msg_count = 0
try:
while msg_count < 1000:
msg_count += 1
result = client.publish(topic, msg_count, qos=1)
status = result[0]
if status == 0:
print("Message " + str(msg_count) + " is published to topic " + topic)
else:
print("Failed to send message to topic " + topic)
if not client.is_connected():
print("Client not connected, exiting...")
break
finally:
client.disconnect()
client.loop_stop()
и программа подписки:
import paho.mqtt.client as mqtt
import logging
logging.basicConfig(filename="log.txt", level=logging.INFO)
def on_connect(client, userdata, flags, reason_code, properties):
print(f"Connected with result code {reason_code}")
client.subscribe("Test", qos=0) # also tested with qos=2, no difference in behaviour
def on_message(client, userdata, msg):
print(msg.topic + " " + str(msg.payload))
logging.info(msg.payload)
broker_hostname = "myhost"
port = 1883
client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)
client.username_pw_set(username="user", password="password")
client.on_connect = on_connect
client.on_message = on_message
client.connect(broker_hostname, port)
client.loop_forever()
Моя информация о комарах:
persistence true
persistence_location /mosquitto/data/
log_type subscribe
log_type unsubscribe
log_type websockets
log_type error
log_type warning
log_type notice
log_type information
log_dest file /mosquitto/log/mosquitto.log
log_dest stdout
password_file /mosquitto/passwd_file
allow_anonymous false
# MQTT Default listener
listener 1883 0.0.0.0
# MQTT over WebSockets
listener 9001 0.0.0.0
protocol websockets
Подробнее здесь: https://stackoverflow.com/questions/792 ... ng-qos1-or
Подписчик получает только первые 2/3 сообщений от издателя при использовании QoS1 или выше для публикации. ⇐ Python
Программы на Python
1732805314
Anonymous
Я тестирую сервер Mosquitto, используя две программы Python. Брокер Mosquitto — это докер на машине с Linux, программы Python работают на моей машине с Windows. Один подписан на тему «Тест» и постоянно слушает и выводит все полученные сообщения на стандартный вывод + добавляет их в лог-файл. Второй отправляет указанное количество сообщений в тему «Тест» так быстро, как только возможно.
Это отлично работает, когда издатель и подписчик используют QoS 0. Однако при использовании QoS 1 для издателя, по-прежнему все сообщения передаются, но только 60-90% сообщений принимаются при использовании ~ 50 сообщений и более. Я также тестировал это со 100, 1000 и 10 000 сообщений - всегда получается около 2/3 сообщений, независимо от количества отправленных сообщений. Кроме того, никакие промежуточные сообщения не отбрасываются, а только те, которые находятся в конце.
Это становится еще хуже при изменении издателя на QoS 2, тогда только 30-50% моих сообщений принимаются абонента.
Уровень QoS моего абонента установлен на 0, изменение его на 1 или 2 ничего не меняет.
Оба скрипта подключены одинаково пользователь.
Я думаю, что система, возможно, не сможет обработать все сообщения так быстро, но почему она не отбрасывает сообщения между ними, а только обрезает их в конец, независимо от количества сообщений?
Вот программа-издатель:
import paho.mqtt.client as mqtt
def on_connect(client, userdata, flags, reason_code, properties):
print(f"Connected with result code {reason_code}")
broker_hostname = "myhost"
port = 1883
client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)
client.username_pw_set(username="user", password="password")
client.on_connect = on_connect
client.connect(broker_hostname, port)
client.loop_start()
topic = "Test"
msg_count = 0
try:
while msg_count < 1000:
msg_count += 1
result = client.publish(topic, msg_count, qos=1)
status = result[0]
if status == 0:
print("Message " + str(msg_count) + " is published to topic " + topic)
else:
print("Failed to send message to topic " + topic)
if not client.is_connected():
print("Client not connected, exiting...")
break
finally:
client.disconnect()
client.loop_stop()
и программа подписки:
import paho.mqtt.client as mqtt
import logging
logging.basicConfig(filename="log.txt", level=logging.INFO)
def on_connect(client, userdata, flags, reason_code, properties):
print(f"Connected with result code {reason_code}")
client.subscribe("Test", qos=0) # also tested with qos=2, no difference in behaviour
def on_message(client, userdata, msg):
print(msg.topic + " " + str(msg.payload))
logging.info(msg.payload)
broker_hostname = "myhost"
port = 1883
client = mqtt.Client(mqtt.CallbackAPIVersion.VERSION2)
client.username_pw_set(username="user", password="password")
client.on_connect = on_connect
client.on_message = on_message
client.connect(broker_hostname, port)
client.loop_forever()
Моя информация о комарах:
persistence true
persistence_location /mosquitto/data/
log_type subscribe
log_type unsubscribe
log_type websockets
log_type error
log_type warning
log_type notice
log_type information
log_dest file /mosquitto/log/mosquitto.log
log_dest stdout
password_file /mosquitto/passwd_file
allow_anonymous false
# MQTT Default listener
listener 1883 0.0.0.0
# MQTT over WebSockets
listener 9001 0.0.0.0
protocol websockets
Подробнее здесь: [url]https://stackoverflow.com/questions/79234345/subscriber-only-receives-first-2-3-of-messages-from-publisher-when-using-qos1-or[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия