我正在测试 Aeron 与原始 TCP 服务器 - 客户端的多播。
Aeron 模型设置:
原始 Tcp 服务器客户端:
结果: Aeron UDP:大约需要 17 秒 原始 TCP:大约需要 8 秒
据我所知,UDP 多播方式应该比 TCP 更快,我是否遗漏了什么或被误解了?我应该检查或微调什么以使 Aeron 更快
TCP 服务器
serverSocket = new ServerSocket(port);
while(true) {
Socket clientSocket = serverSocket.accept();
Thread t = new Thread(){
@Override
public void run() {
try{
System.out.println("Starting new thread serving client");
out = new DataOutputStream(clientSocket.getOutputStream());
in = new DataInputStream(new BufferedInputStream(clientSocket.getInputStream()));
for (int i = 0; i < 1_000_000; i++) {
System.out.println("Server sending..." + i + "..!");
out.writeInt(i);
}
} catch (IOException e){
//
}
}
};
t.start();
}
TCP 客户端
System.out.println("I'm client!");
TcpClient client = new TcpClient();
String serverHost = System.getProperty("host");
try {
client.startConnection(serverHost, 6666);
DataInputStream in = client.in;
long st = System.currentTimeMillis();
int counter = 1_000_000;
while(counter > 0) {
int v = in.readInt();
// System.out.println("v: " + v);
counter--;
}
long pt = System.currentTimeMillis() - st;
System.out.println("Process time of TCP raw: " + pt);
} finally {
client.stopConnection();
}
我可以在几分之一秒内使用 Aeron 在两台机器之间推送 100 万条消息。您的基准可能会得到改进。尝试熟悉像 JMH 这样的框架并了解实际测量的内容。这里有 Aeron(和其他消息传递)基准 - https://github.com/real-logic/benchmarks.