Хорошо, я отредактировал свой ответ, чтобы отразить ваш ответ: извините за задержку, но я не заметил, что вы уточнили вопрос, создав ответ.
Похоже, что функционально вы не делаете ничего плохого.
Я думаю, что когда вы распространяете свое приложение вне условий локального хоста, дополнительные 100 мкс (если оно действительно приблизительно постоянное) станут незначительными по сравнению со средней задержкой работающей сети.
В целях ответа на ваш вопрос я думаю, что существует проблема планирования потоков / прерываний на стороне сервера, которую необходимо исследовать, так как вы, похоже, не делаете на клиенте ничего, что не учитывается.
Попробуйте следующий тестовый сценарий:
- Отправьте два зонда клиентам A и B. (все localhost)
- Отправьте зонд «Клиенту Б» через одну секунду (или Х / 2 секунды) после того, как вы отправите зонд клиенту А.
- Обеспечение того, что «Клиент А» ждет две секунды (или Х секунд), а «Клиент Б» ждет одну секунду (или Х / 2 секунд)
Идея состоит в том, что, как мы надеемся, оба клиента отправят свои тестовые ответы примерно в одно и то же время и оба после сна / ожидания (выполняя действие, которое выявляет проблему). Цель состоит в том, чтобы попытаться получить ответ одного из клиентов, чтобы «разбудить» издателя, и посмотреть, будет ли следующий ответ клиента обработан немедленно.
Если один из этих возвращенных зондов не показывает аномалию (скорее всего, второй ответ), это может указывать на тот факт, что поток издателя выходит из цикла ожидания (в первом ответе) и немедленно доступен для обработки второго ответа.
Опять же, если окажется, что задержка в 100 мкс примерно постоянна, она составит + -10% от 1 мс, что является периодом, подходящим для условий сети реального мира.