/ / Jak zmierzyć czas odpowiedzi sieci za pomocą Java? - Java, networking, czas reakcji

Jak zmierzyć czas odpowiedzi sieci za pomocą Java? - Java, networking, czas reakcji

Mamy klienta i serwer. Chcę zmierzyć czas odpowiedzi sieci między nimi. Kiedy wyślę żądanie do serwera, powinien natychmiast odpowiedzieć na moje żądanie, powinno to być jak żądanie ping, aby na serwerze nie było czasu przetwarzania.

Jak mogę to zrobić w Javie?

Odpowiedzi:

2 dla odpowiedzi № 1

Zrobiłem to, wysyłając pakiet zznacznik czasu od klienta do serwera, a następnie zwracanie przez serwer tego samego znacznika czasu. Kiedy serwer otrzymuje znacznik czasu, może porównać go z bieżącym znacznikiem czasu, aby zmierzyć czas podróży w obie strony.

Podobno istnieje sposób na wygenerowanie Ping ICMP w Javie 5 i późniejszych. Jeśli chcesz zmierzyć prędkości sieci, po prostu chwyć System.nanoTime() przed i po i porównaj. Zwróć uwagę, że jeśli twój program działa z niewystarczającymi przywilejami do wykonania ping ICMP, to Java użyje żądania echa TCP do portu 7, które będzie nadal odpowiadało twoim potrzebom.


1 dla odpowiedzi nr 2

Aby zapewnić odpowiedź serwera tak szybko, jak to możliwe, powinieneś

  1. mieć drugie połączenie z innym portem - jest to przydatne, jeśli chcesz przetestować trasę do serwera, np. przewody - lub
  2. wspólny wątek dla wszystkich pakietów przychodzącychzadecyduje, czy przychodzący pakiet jest żądaniem ping i natychmiast reaguje - co jest przydatne, jeśli chcesz przetestować bieżące połączenie (które bierze pod uwagę inne pakiety z tego połączenia).

Tak czy inaczej, część odsłuchowa (serwer) powinna mieć własny wątek lub przetwarzanie żądania może przestać działać, podczas gdy inne pakiety są przetwarzane.

Zauważ, że cokolwiek zrobisz, aby zmierzyć szybkość połączenia, nie będziesz miał pewnej wartości. Powinieneś mieć jednak akceptowalną wartość, jeśli weźmiesz średnią kilku takich pingów.


1 dla odpowiedzi nr 3

Myślę, że musisz rozróżnić czasprzeniesiony na serwer (maszynę) i czas na proces po stronie serwera, aby obsłużyć to. Na przykład ping będzie po prostu mierzył czas odpowiedzi ICMP, który jest zwrotem protokołu sieciowego niskiego poziomu. Jeśli weźmiesz pod uwagę stos TCP, a następnie kolejne przetwarzanie przez serwer, ten okres czasu będzie większy.

Z twojego pytania wynika, że ​​ping (ICMP) jest tym, czego potrzebujesz. W JDK 5 i nowszych możesz:

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

i będziesz musiał poświęcić czas na używanie System.nano() lub podobne.


0 dla odpowiedzi nr 4

użycie polecenia ping powinno wystarczyć lub wget ta szybkość transferu śledzenia. Możesz użyć justniffer do wąchania czasów odpowiedzi "uruchomionych" serwerów produkcyjnych.