Как измерить время отклика сети с помощью Java? - PullRequest
4 голосов
/ 07 апреля 2009

У нас есть клиент и сервер. Я хочу измерить время отклика сети между ними. Когда я отправляю запрос на сервер, он должен немедленно ответить на мой запрос, он должен быть похож на запрос проверки связи, чтобы на сервере не было времени обработки.

Как я могу сделать это на Java?

Ответы [ 4 ]

2 голосов
/ 07 апреля 2009

Я сделал это, отправив пакет с меткой времени от клиента к серверу, а затем заставив сервер вернуть ту же метку времени назад. Когда сервер получает метку времени, он может сравнивать ее с текущей меткой времени для измерения времени прохождения туда и обратно.

По-видимому, существует способ генерирования ICMP-пинга в Java 5 и более поздних версиях. Если вы хотите измерить скорость сети, просто возьмите System.nanoTime() до и после и сравните. Обратите внимание, что если ваша программа работает с недостаточным количеством привилегированных пользователей для выполнения ICMP-пинга, тогда Java прибегнет к использованию эхо-запроса TCP к порту 7, который все равно будет соответствовать вашим потребностям.

1 голос
/ 07 апреля 2009

Я думаю, вам нужно различать время, затрачиваемое на сервер (компьютер), и время, которое ваш серверный процесс обрабатывает. Например, ping просто измеряет время отклика ICMP, которое является низкоуровневым возвратом сетевого протокола. Если принять во внимание стек TCP, а затем последующую обработку сервером, этот период времени будет больше.

Исходя из вашего вопроса, звучит так, как будто вам нужен ping (ICMP). В JDK 5 и выше вы можете сделать:

String host = "192.168.0.1"
int timeOut = 5000; 
boolean status = InetAddress.getByName(host).isReachable(timeOut)

, и вам нужно рассчитать время, используя System.nano() или аналогичный.

1 голос
/ 07 апреля 2009

Чтобы обеспечить максимально быстрый отклик сервера, вы должны либо

  1. есть второе соединение с другим портом - это полезно, если вы хотите проверить маршрут к серверу, то есть по проводам - ​​или
  2. общий поток для всех входящих пакетов, который решает, является ли входящий пакет запросом ping, и немедленно отвечает - что полезно, если вы хотите проверить текущее соединение (которое учитывает другие пакеты в этом соединении).

В любом случае прослушивающая часть (сервер) должна иметь свой собственный поток или обработка запроса может устареть во время обработки других пакетов.

Обратите внимание: что бы вы ни делали для измерения скорости соединения, у вас не будет надежного значения. Тем не менее, вы должны иметь приемлемое значение, если вы берете в среднем несколько таких пингов.

0 голосов
/ 02 ноября 2011

с использованием ping должно быть достаточно или wget , что скорость передачи трассировки. Вы можете использовать justniffer для определения времени отклика "производственных" запущенных серверов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...