Vorrei usare questa libreria che ho trovato, è una pura porta java (non un wrapper) di zeromq. Sto provando a testarlo e mentre è claims alcuni buoni numeri, il test che sto eseguendo sta dando risultati piuttosto scadenti e viene persino eseguito localmente (client e servizio sulla stessa macchina). Sono sicuro che sia qualcosa che sto sbagliando. Ci vogliono circa 5 secondi per eseguire questo ciclo di 10.000 messaggi.Perché questo benchmark JeroMQ (porta ZeroMQ) è lento?
Tutto ciò che ho fatto è prendere l'esempio Hello world e rimosso pause e sysouts. Ecco il codice:
Server:
package guide;
import org.jeromq.ZMQ;
public class hwserver{
public static void main(String[] args) throws Exception{
// Prepare our context and socket
ZMQ.Context context = ZMQ.context(1);
ZMQ.Socket socket = context.socket(ZMQ.REP);
System.out.println("Binding hello world server");
socket.bind ("tcp://*:5555");
while (true) {
byte[] reply = socket.recv(0);
String requestString = "Hello" ;
byte[] request = requestString.getBytes();
socket.send(request, 0);
}
}
}
Il Cliente:
package guide;
import org.jeromq.ZMQ;
public class hwclient{
public static void main(String[] args){
ZMQ.Context context = ZMQ.context(1);
ZMQ.Socket socket = context.socket(ZMQ.REQ);
socket.connect ("tcp://localhost:5555");
System.out.println("Connecting to hello world server");
long start = System.currentTimeMillis();
for(int request_nbr = 0; request_nbr != 10_000; request_nbr++) {
String requestString = "Hello" ;
byte[] request = requestString.getBytes();
socket.send(request, 0);
byte[] reply = socket.recv(0);
}
long end = System.currentTimeMillis();
System.out.println(end-start);
socket.close();
context.term();
}
}
È è possibile fissare questo codice e ottenere alcuni numeri decenti?
Altri hanno risposto come ottenere numeri più veloci - facendo qualcos'altro. Voglio solo far notare che i tuoi numeri, in termini assoluti, non sono necessariamente negativi: in media 0,5 ms per messaggio con risposta circolare. E come parte del roundtrip, il messaggio viene analizzato in un linguaggio di alto livello e una versione elaborata viene inviata indietro. Confrontalo con le cifre ottenendo un semplice ping ICMP, e ti rendi conto del sovraccarico di TCP, JeroMQ e del tuo codice. –