Dan*_*Dan 5 benchmarking messaging zeromq jeromq
我想使用我发现的这个库,它是zeromq的纯java端口(不是包装器).我正在尝试测试它,虽然它声称有一些好的数字,我正在执行的测试结果相当差,它甚至在本地执行(客户端和服务在同一台机器上).我确定这是我做错了.需要约.5秒执行此10.000消息循环.
我所做的只是采用Hello world示例并删除了暂停和sysouts.这是代码:
服务器:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
客户端:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
有可能修复此代码并获得一些不错的数字?
Pie*_*ens 14
你正在进行往返请求 - 回复,这与使用C++ libzmq一样慢.在流式传输时,您只能在JeroQM,ZeroMQ或任何I/O上获得快速性能.
由于I/O和TCP的工作方式,往返速度很慢.在libzmq上,我们可以使用往返来做大约20K消息/秒,使用流做8M /秒.流式传输还有额外的优化,如批处理,而往返请求 - 回复则无法做到.
对于吞吐量性能测试,将10M消息从节点1发送到节点2,然后在获得它们时发回一个ACK.在ZeroMQ和JeroMQ上,您应该看到速度差异大约为3倍.