|
Модераторы: LSD, AntonSaburov |
|
Рубильник |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 6.6.2016 Репутация: нет Всего: нет |
Есть простой сервер и клиент.
Клиент отправляет пакет из 10-20 байт в котором есть число, сервер прочитывает это число, прибавляет 1 и возвращает обратно. Как только клиент прочитывает возвращенное значение, он отсылает пакет серверу обратно. Т.е. самописная система для тестирования отклика по сети. Использованы только базовые средства java. После записи делается flush() в обязательном порядке. Если тестить локально, то получается 1000 откликов занимает 50-60 мс. Если сервер и клиент на разных компах (но внутри одной сети), то 100 откликов занимает целых 33 секунды, т.е. один отклик занимает треть секунды. В чем может быть дело? Пингование стандартными средствами показывает гораздо быстрый отклик. Может ли в этом виноватой быть ОС Windows XP? |
|||
|
||||
AntonSaburov |
|
|||
Штурман Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Я сталкивался с ситуацией, когда пакет может "зависать" на свичах, если он маленький.
Попробуйте организовать многопоточный вариант - например потоков 50 и каждый делает, что описано. На сервере тоже многопоточный вариант. Может сдвинется. Хотя гарантий конечно же нет. |
|||
|
||||
Рубильник |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 6.6.2016 Репутация: нет Всего: нет |
Система строится по концепции тонкого клиента, где многие действия пользователя формирует обращение к серверу. Требовалось оценить скорость отклика, чтобы у пользователя не возникало дискомфорта.
Не очень понимаю, чем может помочь здесь много поточность? Меня же интересует именно отклик, а не пропускная способность. В играх сигнал идет от клиента, обрабатывается на сервере и возвращается (для визуализации). Пусть реально это 20 fps, т.е. отклик всего 50 мс. И меня бы это устроило, но треть секунды - это очень много, и визуально очень заметно, это ещё без времени для отработки на самом сервере (кто знает какие там запросы). Меня интересует "кто виноват?" Если причина тому сама Java - это одно, значит придется менять концепцию. Если виновата ОС или сетевые настройки, то это совсем другое дело. На всякий случай выкладываю код теста.
Это сообщение отредактировал(а) Рубильник - 10.5.2018, 13:13 |
||||||
|
|||||||
AntonSaburov |
|
|||
Штурман Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Да просто маленькие пакеты могут тупо зависать на свичах. Т.к. вы их кидаете последовательно, то свич просто не прокидывает дальше. А вот если пакетов "накапливается" много, то есть вероятность, что они будут проброшены дальше. Т.к. Вы каждый раз отправляете маленький пакет и ждеме, то и получаете.
В случае многопоточности вы пробрасываете много пакетиков и их суммарный объем может позволить свичу их пробросить. Но это я делаю только предположение. Не факт, что проблема здесь. |
|||
|
||||
Рубильник |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 6.6.2016 Репутация: нет Всего: нет |
Ради интереса поставил сниффер.
В логе задержка между приемом пакета от клиента и отправкой следующего составляет примерно 150 мс, и столько же примерно между отправкой клиента и получением нового. В сумме получается примерно 300 мс. Получается, что виновата не сеть. Если бы был затык в сети (в оборудовании), то между приемом и отправкой была бы маленькая пауза, и большая между отправкой и приемом. Или я неправильно что-то понимаю? |
|||
|
||||
AntonSaburov |
|
|||
Штурман Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Ну тогда надо профилировать - какой оператор "жрет много" и у кого. Самое простое - понатыкать везде логи.
|
|||
|
||||
Рубильник |
|
|||
Новичок Профиль Группа: Участник Сообщений: 19 Регистрация: 6.6.2016 Репутация: нет Всего: нет |
Разобрался. Всё дело в socket.setTcpNoDelay(true).
Delayed ACK нужно отключать и на сервере и на клиенте. Теперь время отклика 0.5-1.5 мс. Что есть очень хорошо. |
|||
|
||||
AntonSaburov |
|
|||
Штурман Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: 51 Всего: 118 |
Ну да - точно. Буферизуется пакет, если маленький. Как я и предполагал. Правда я не на тот девайс подумал
|
|||
|
||||
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |