org.jgroups.tests.RoundTripTcp Maven / Gradle / Ivy
package org.jgroups.tests;
import org.jgroups.util.Util;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
/**
* Class that measure RTT between a client and server using ServerSocket/Socket
* @author Bela Ban
*/
public class RoundTripTcp {
ServerSocket srv_sock;
InetAddress host;
int port=7500;
int num=1000;
int msg_size=10;
boolean server=false;
final byte[] RSP_BUF=new byte[]{1}; // 1=response
int num_responses=0;
private void start(boolean server, int num, int msg_size, InetAddress host, int port) throws IOException {
this.server=server;
this.num=num;
this.msg_size=msg_size;
this.host=host;
this.port=port;
Socket client_sock;
if(server) {
srv_sock=new ServerSocket(port, 50, host);
System.out.println("server started (ctrl-c to kill)");
while(true) {
client_sock=srv_sock.accept();
while(true) {
InputStream in=null;
OutputStream out=null;
try {
in=client_sock.getInputStream();
out=client_sock.getOutputStream();
int b=in.read();
out.write(RSP_BUF, 0, RSP_BUF.length);
}
catch(Exception ex) {
// ex.printStackTrace();
Util.close(in);
Util.close(out);
client_sock.close();
break;
}
}
}
}
else {
Socket sock=new Socket(host, port);
System.out.println("sending " + num + " requests");
sendRequests(sock);
}
}
private void sendRequests(Socket sock) throws IOException {
byte[] buf=new byte[msg_size];
long start, stop, total;
double requests_per_sec;
double ms_per_req;
int print=num / 10;
num_responses=0;
for(int i=0; i < buf.length; i++) {
buf[i]=0; // 0=request
}
OutputStream out=null;
InputStream in=null;
try {
out=sock.getOutputStream();
in=sock.getInputStream();
start=System.currentTimeMillis();
for(int i=0; i < num; i++) {
try {
out.write(buf, 0, buf.length);
int b=in.read();
num_responses++;
if(num_responses >= num) {
System.out.println("received all responses (" + num_responses + ")");
break;
}
if(num_responses % print == 0) {
System.out.println("- received " + num_responses);
}
}
catch(Exception e) {
e.printStackTrace();
}
}
stop=System.currentTimeMillis();
total=stop-start;
requests_per_sec=num / (total / 1000.0);
ms_per_req=total / (double)num;
System.out.println("Took " + total + "ms for " + num + " requests: " + requests_per_sec +
" requests/sec, " + ms_per_req + " ms/request");
}
finally {
Util.close(in);
Util.close(out);
sock.close();
}
}
public static void main(String[] args) throws IOException {
boolean server=false;
int num=100;
int msg_size=10; // 10 bytes
InetAddress host=null;
int port=7500;
for(int i=0; i < args.length; i++) {
if(args[i].equals("-num")) {
num=Integer.parseInt(args[++i]);
continue;
}
if(args[i].equals("-server")) {
server=true;
continue;
}
if(args[i].equals("-size")) {
msg_size=Integer.parseInt(args[++i]);
continue;
}
if(args[i].equals("-host")) {
host=InetAddress.getByName(args[++i]);
continue;
}
if(args[i].equals("-port")) {
port=Integer.parseInt(args[++i]);
continue;
}
RoundTripTcp.help();
return;
}
if(host == null)
host=InetAddress.getLocalHost();
new RoundTripTcp().start(server, num, msg_size, host, port);
}
private static void help() {
System.out.println("RoundTrip [-server] [-num ] " +
"[-size ] [-host ] [-port ]");
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy