it-swarm-eu.dev

Jak mohu najít dobu odezvy HTTP požadavku přes Socket

Používám soket Java, připojený k serveru. Pokud pošlu požadavek na zadání HEADER http, jak mohu změřit dobu odezvy ze serveru? Musím použít dodaný časovač Java, nebo je snadnější?

Hledám krátkou odpověď, nechci používat jiné protokoly atd. Samozřejmě nechci mít řešení, které by spojilo mou aplikaci s konkrétním OS. Prosím lidi, pouze IN-CODE řešení. 

19
Martin Andersson

Řekl bych, že záleží na tom, jaký přesný interval se snažíte měřit, množství času od posledního bajtu požadavku, který odešlete až do prvního bajtu odpovědi, kterou obdržíte? Nebo dokud nebude přijata celá odpověď? Nebo se snažíte měřit pouze čas na straně serveru?

Pokud se pokoušíte měřit čas zpracování pouze na straně serveru, budete mít těžký čas, který vám vyřídí čas strávený v tranzitu sítě pro vaši žádost o doručení a odpověď na návrat. V opačném případě, protože spravujete požadavek sami prostřednictvím Socket, můžete měřit uplynulý čas mezi dvěma okamžiky kontrolou systémových hodin a výpočtem rozdílu. Například:

public void sendHttpRequest(byte[] requestData, Socket connection) {
    long startTime = System.currentTimeMillis();
    writeYourRequestData(connection.getOutputStream(), requestData);
    byte[] responseData = readYourResponseData(connection.getInputStream());
    long elapsedTime = System.currentTimeMillis() - startTime;
    System.out.println("Total elapsed http request/response time in milliseconds: " + elapsedTime);
}

Tento kód by změřil čas od okamžiku, kdy začnete psát svůj požadavek, až když obdržíte odpověď a vytisknete výsledek (za předpokladu, že máte implementovány specifické metody čtení/zápisu).

11
Dave L.

curl -s -w "%{time_total}\n" -o /dev/null http://server:3000

19
A B

Na příkazovém řádku můžete použít čas a zkroucení a čas. -I argument pro curl pokyn, aby požadovat pouze záhlaví.

time curl -I 'http://server:3000'
12
hoyhoy

Něco takového by mohlo způsobit trik

 import Java.io.IOException, 
 
 import org.Apache.commons.httpclient.HttpClient; 
 import org.Apache.commons.httpclient.HttpMethod; .____.] import org.Apache.commons.httpclient.URIException; 
 import org.Apache.commons.httpclient.methods.HeadMethod; 
 import org.Apache.commons.lang.time.StopWatch 
 // import org.Apache.commons.lang3.time.StopWatch 
 
 public class Hlavní {
 
 public static void main (String [] args) hodí URIException {
 Stopky hodinky = new StopWatch (); 
 HttpClient client = new HttpClient (); 
 HttpMethod method = new HeadMethod ("http: // stackoverflow .com /"); 
 
] try {
 watch.start (); 
 client.executeMethod (method); 
} catch (IOException e) {
 e.printStackTrace (); 
} nakonec {
 watch.stop (); 
} 
 
 Systém .out.println (St ring.format ("% s% s% d:% s", method.getName (), method.getURI (), method.getStatusCode (), watch.toString ())); 
 
} 
} 
 HEAD http://stackoverflow.com/ 200: 0: 00: 00.404 
7
Dave Cheney

Možná mi něco chybí, ale proč nepoužíváte:

// open your connection
long start = System.currentTimeMillis();
// send request, wait for response (the simple socket calls are all blocking)
long end = System.currentTimeMillis();
System.out.println("Round trip response time = " + (end-start) + " millis");
2
Kevin Day

Použijte AOP k zachycení hovorů do zásuvky a změřte dobu odezvy.

0
Adi
@Aspect
@Profile("performance")
@Component
public class MethodsExecutionPerformance {
    private final Logger logger = LoggerFactory.getLogger(getClass());

    @Pointcut("execution(* it.test.microservice.myService.service.*.*(..))")
    public void serviceMethods() {
    }

    @Around("serviceMethods()")
    public Object monitorPerformance(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
        StopWatch stopWatch = new StopWatch(getClass().getName());
        stopWatch.start();
        Object output = proceedingJoinPoint.proceed();
        stopWatch.stop();
        logger.info("Method execution time\n{}", stopWatch.prettyPrint());
        return output;
    }
}

Tímto způsobem můžete vypočítat skutečnou dobu odezvy vaší služby nezávisle na rychlosti sítě. 

0
Sudabe-Neirizi