Я работаю в HiveMQ, и у меня есть два клиента по одному в каждом потоке, и у меня есть основной поток, который запускает эти два потока.Я использовал System.nanoTime()
для определения времени как отправки (для одного потока), так и получения (для другого потока), чтобы я мог сложить значения, чтобы получить общее время отправки и получения определенного количества сообщений.Я использовал синхронизированный блок с wait()
и notify()
в Java, чтобы таймеры запускались примерно в одно и то же время, когда один поток должен будет пробудить другой.Кажется, что мое окончательное время отправки и получения варьируется от 0 до 350 миллисекунд , когда при запуске моей программы 15 сообщений отправляются и принимаются естественно.Для контекста сервер и клиент работают на одном компьютере, используя localhost в качестве адреса сервера.Могу ли я в любом случае получить более точное (менее изменяющееся) время в моих темах?Я хочу получить как можно больше точности.
Код для подписчика (отправляющий клиент):
scheduler.waitToReceive(); // makes the SubThread wait until the PubThread is ready to send a message
System.out.println("Timer started");
startTime = System.nanoTime();
for (int i = 1; i <= 15; i++) {
Mqtt5Publish receivedMessage = receivingClient1.receive(MESSAGEWAITTIME,TimeUnit.SECONDS).get(); // receives the message using the "publishes" instance // .get() returns the object if available or throws a NoSuchElementException
PubSubUtility.convertMessage(receivedMessage); // Converts a Mqtt5Publish instance to string and prints
}
endTime = System.nanoTime();
Код для издателя (публикующий клиент):
readyToSend = true;
scheduler.notifyStartReceive(); // notifies SubThread it can starts receiving messages
startTime = System.nanoTime();
for (int i = 1; i <= 15; i++) {
publisher.publishWith()
.topic(publisherTopic) // publishes to the specified topic
.qos(MqttQos.EXACTLY_ONCE) // sets the quality of service to 2
.payload(convertedMessage) // the contents of the message
.send();
}
endTime = System.nanoTime();