Я относительно новичок в MQTT, поэтому мой словарный запас может быть неточным. Что, как говорится…
Какова максимальная скорость обратного вызова / потребления токена / публикации при использовании библиотеки paho MQTT c ++?
Моя программа публикует и подписывается на одну и ту же тему (но не на одну и ту же подтему). Он отправляет данные в режиме реального времени (с настройкой 10-100 мс) и в конечном итоге дает сбой из-за повреждения памяти. У меня возникают проблемы, точно определяющие, происходит ли повреждение при публикации сообщения или при получении сообщения, но я понимаю, что в любом случае это должно быть вызвано, потому что в очереди слишком много действий.
Я понимаю, что эта скорость зависит от программы и процессора, но приблизительная оценка того, насколько быстро она должна нормально работать, была бы хорошей.
Вот часть кода, используемая для публикации, а также обратный вызов.
Публикация выполняется на частоте около 10 Гц — Сбои после 70-250 вызовов.
string topic= "MyTopic/MySubTopic";
string payload = "String payload";
auto pubmsg = mqtt::make_message(topic, payload);
pubmsg->set_qos(2);
try {
m_pClient->publish(pubmsg);
}
catch (mqtt::exception& exception)
{
//In case of exception, send warning but do not publish. We don't care if we miss a few publish.
cout << "Warning: MQTT exception! Error code: " << exception.get_reason_code() << endl << exception.to_string() << endl;
}
Метод CallBack — работает нормально до повреждения памяти
void MyCallBack::message_arrived(mqtt::const_message_ptr msg)
{
string topic = msg->get_topic();
if (topic=="MyTopic/MySubTopic")
{
//Do stuff
}
else
{
//cout << topic << endl;
}
}
редактировать : Я подписался на "MyTopic/OtherSubTopic"
скорее, чем "MyTopic/#"
и проблема все еще возникает, то есть повреждение памяти происходит на Publish()
и не на message_arrived()
,
Редактировать 2: Я замедлил цикл публикации (см. Выше) и теперь получаю ошибки mqtt -5 MQTTCLIENT_BAD_UTF8_STRING
или иногда -9 MQTTCLIENT_BAD_QOS
,
Задача ещё не решена.
Других решений пока нет …