【发布时间】:2012-10-27 17:06:46
【问题描述】:
我想使用我找到的这个库,它是 zeromq 的纯 Java 端口(不是包装器)。 我正在尝试对其进行测试,虽然它claims 有一些不错的数字,但我正在执行的测试结果相当差,甚至在本地执行(客户端和在同一台机器上服务)。我确定这是我做错了。大约需要。 5 秒 来执行这 10.000 条消息循环。
我所做的只是采用 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 和您的代码的开销。
标签: benchmarking messaging zeromq jeromq