Я создаю серверное приложение реального времени, в котором сервер отправляет заказы на окраску, и клиент рисует их. Я разработал все приложение на своем Mac. Все работает без ошибок в реальном времени, поэтому я решил протестировать его на своей машине с Windows.Отказ от сервера реального времени/клиентского приложения
После много отладки и тестов я выделил проблему. Сервер посылает каждые 15 мс резко изменяет поведение order.The в каждой среде
Мак
клиент получает заказ с различным временем отклика (Результат = Real Time App)
System.currentTimeMillis()
Calling repaint: 1428155128955//Reception Time different
Calling repaint: 1428155129162
Calling repaint: 1428155129178
Windows
Клиент получает несколько заказов одновременно (приложение «Результат = Задержка»). До 5 заказов собраны одновременно
System.currentTimeMillis()
Calling repaint: 1428155129524//Reception time the same
Calling repaint: 1428155129524
Calling repaint: 1428155129524
Я хочу акцент, который тот же работоспособная баночка на оба средах с одинаковым доступом в Интернете, я загрузил два видео для иллюстрации проблемы
MAC Video - в режиме реального времени https://youtu.be/OhNXdGXoQpk
Окна Видео - лаг https://youtu.be/OhNXdGXoQpk
Я также провел видео живого VisualVM в Windows: https://youtu.be/cRNX4b3rlZk. Я не вижу ничего странного, что могло бы объяснить, почему происходит лаг, но я далек от того, чтобы быть экспертом (извините за низкое качество).
Кроме того, я попытался
- увеличение размера кучи
использование специальных сборщиков мусора
-XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=2 -XX:+AggressiveOpts
Что может влиять на производительность, так резко? Есть ли возможное решение?
У меня нет подсказки, что может вызвать отставание.
Спасибо заранее
Update
После следующих советов @Hannes я понюхал весь трафик между сервером и клиентом, результаты следующие:
пакеты поступают в разное время , Но я не знаю, почему пакет аккумулируют (это простое соединение TCP):
clientSentence = inFromClient.readLine();
System.out.println("Arrived: "+ System.currentTimeMillis());
//paint
и считываются одновременно.
Что беспокоит меня больше, почему это работает в среде моего Mac ....
Я также протестировал Socket.setTcpNoDelay(boolean)
без каких-либо улучшений
Sniff трафика. Это даст вам время прибытия пакета. Это может быть проблема с буфером ... – Hannes
Каковы средства связи? TCP? – wilx
Привет, спасибо за ваш ответ. Я обновил свой вопрос. Цель состоит в том, чтобы отправить фигуры (= String), это базовое TCP-соединение. –