2015-04-04 3 views
1

Я создаю серверное приложение реального времени, в котором сервер отправляет заказы на окраску, и клиент рисует их. Я разработал все приложение на своем 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) без каких-либо улучшений

+0

Sniff трафика. Это даст вам время прибытия пакета. Это может быть проблема с буфером ... – Hannes

+0

Каковы средства связи? TCP? – wilx

+0

Привет, спасибо за ваш ответ. Я обновил свой вопрос. Цель состоит в том, чтобы отправить фигуры (= String), это базовое TCP-соединение. –

ответ

0

Попробуйте отключить ОТЛОЖ.ПЕРЕДАЧУ. Попробуйте использовать Socket.setTcpNoDelay(boolean).

+0

Привет, спасибо за ваш ответ, я обновил свой вопрос –

Смежные вопросы