我正在测试一个简单的MQTT客户机-服务器模型,其中客户机反复向服务器发送请求并等待对每个请求的答复。流程是这样的:
在QoS级别1下,我希望服务器完全接收从客户端发送的1000条消息,并发送回1000条回复。但是,当服务器接收并发送了大约200-300条消息时,我的程序总是停滞不前。当我注释掉对MQTTAsync_sendMessage()
的呼叫时,服务器可以接收全部1000条消息。我怀疑某种竞争状况或线程限制导致了这种情况,但我不太确定。
服务器中新消息的回调如下:
#define TOPIC_IN "client/server"
#define TOPIC_OUT "server/client"
#define PAYLOAD "hello client\n"
unsigned long long messagesIn = 0, messagesOut = 0;
int on_message_arrival (void *context, char *topic_name,
int topic_length, MQTTAsync_message *message) {
if (!strcmp(topic_name, TOPIC_IN)) {
MQTTAsync_freeMessage(&message);
MQTTAsync_free(topic_name);
messagesIn++;
MQTTAsync_message pub_message = MQTTAsync_message_initializer;
MQTTAsync_responseOptions opts = MQTTAsync_responseOptions_initializer;
pub_message.payload = PAYLOAD;
pub_message.payloadlen = strlen(PAYLOAD);
pub_message.qos = QOS1;
pub_message.retained = 0;
delivered_token = 0;
opts.context = &message;
MQTTAsync_sendMessage((MQTTAsync)context, TOPIC_OUT, &pub_message, &opts);
} else {
MQTTAsync_freeMessage(&message);
MQTTAsync_free(topic_name);
}
return 1;
}
任何帮助我进行调试的指南都将受到赞赏。非常感谢你!