我想使用這個庫,我發現它是一個純粹的java端口(不是包裝)zeromq。 我想測試它,雖然它claims一些很好的數字,我正在執行的測試是給予相當差的結果,它甚至在本地執行(客戶端和服務器在同一臺機器上)。我相信這是我做錯了。它大約需要。 5秒執行此10.000消息循環。爲什麼這個JeroMQ(ZeroMQ端口)基準測試如此緩慢?
我所做的就是以Hello World爲例,並刪除了暫停和系統輸出。下面是代碼:
服務器:
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);
}
}
}
客戶:
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();
}
}
是可以解決這個代碼,並得到一些體面的數字?
其他人回答瞭如何獲得更快的數字 - 通過做別的事情。我只想指出,從絕對數字來看,你的數字並不一定是壞的:平均每個往返消息0.5毫秒。作爲往返的一部分,該消息被解析爲高級語言,並將其處理後的版本發回。比較一下你所做的一個簡單的ICMP ping,你會感覺到TCP,JeroMQ和你的代碼的開銷。 –