Ich versuche, einen Mikro-Benchmark für TCP-Socket-Kommunikation durch eine Schleife eines Sendens und Empfangen von Nachrichten zu implementieren. Allerdings habe ich eine hohe Latenz im Vergleich zur Standardlatenz des TCP-Sockets in einigen Diagrammen. Wie kann ich meinen Code verbessern?Wie verbessert man diese tcp-Socket-Kommunikation?
Server Side
DataOutputStream output = new DataOutputStream(this.clientSocket.getOutputStream());
DataInputStream input = new DataInputStream(this.clientSocket.getInputStream());
int j = 0;
while (j < loop) {
output.write(bytes);
input.read(new byte[input.readInt()]);
j++;
}
Client Side
DataOutputStream output = new DataOutputStream(socket.getOutputStream());
DataInputStream input = new DataInputStream(socket.getInputStream());
final long startTime = System.nanoTime();
int j = 0;
while (j < loop) {
input.read(new byte[input.readInt()]);
output.write(bytes);
j++;
}
final long endTime = System.nanoTime();
final double difference = (endTime - startTime)/1e6;
LOGGER.info("Latency:"+ difference/loop);
Beachten dass die Genauigkeit von System.nanoTime() und System.currentTimeMillis() systemabhängig ist und m Sie sind nicht genau genug für Ihren Anwendungsfall. –
Standardlatenz? Die Latenzzeit hängt von der Netzwerküberlastung ab, die Sie im Internet nicht kontrollieren können. Sollten Sie die readFully-Methode nicht verwenden? read() kann und wird weniger Bytes zurückgeben als angefordert werden. Was ist "Bytes"? Wie definieren Sie Latenz? –