Open
Description
I am using the Jer0mq server socket model and specifically the router dealer pattern because I want to validate the identity of the clients. My problem is that I notice random upsurge spikes of 500 ms when I use a loop case where the server binds the socket and the client tries to connect. From negligible delays up to 500 ms delay, why is this happening? how can I avoid such latency? is this possible? What am I doing wrong? Here is my simple code to test it.
package sockets;
import org.zeromq.SocketType;
import org.zeromq.ZContext;
import org.zeromq.ZMQ;
import java.nio.charset.StandardCharsets;
import static sockets.rtdealer.NOFLAGS;
public class ZmqStack {
public static void main(String[] args) throws InterruptedException {
Thread brokerThread = new Thread(() -> {
while (true) {
try (ZContext context = new ZContext()) {
ZMQ.Socket broker = context.createSocket(SocketType.ROUTER);
broker.bind("tcp://*:5555");
String identity = new String(broker.recv());
String data1 = new String(broker.recv());
String identity2 = new String(broker.recv());
String data2 = new String(broker.recv());
System.out.println("Identity: " + identity + " Data: " + data1);
System.out.println("Identity: " + identity2 + " Data: " + data2);
broker.sendMore(identity.getBytes(ZMQ.CHARSET));
broker.send("xxx1".getBytes(StandardCharsets.UTF_8));
broker.sendMore(identity2.getBytes(ZMQ.CHARSET));
broker.send("xxx12");
broker.close();
context.destroy();
}
}
});
brokerThread.setName("broker");
Thread workerThread = new Thread(() -> {
while (true) {
try (ZContext context = new ZContext()) {
ZMQ.Socket worker = context.createSocket(SocketType.DEALER);
String identity = "identity1";
worker.setIdentity(identity.getBytes(ZMQ.CHARSET));
worker.connect("tcp://localhost:5555");
worker.send("Hello1".getBytes(StandardCharsets.UTF_8));
String workload = new String(worker.recv(NOFLAGS));
System.out.println(Thread.currentThread().getName() + " - Received " + workload);
}
}
});
workerThread.setName("worker");
Thread workerThread1 = new Thread(() -> {
while (true) {
try (ZContext context = new ZContext()) {
ZMQ.Socket worker = context.createSocket(SocketType.DEALER);
worker.setIdentity("Identity2".getBytes(ZMQ.CHARSET));
worker.connect("tcp://localhost:5555");
long start = System.currentTimeMillis();
worker.send("Hello2 " + Thread.currentThread().getName());
String workload = new String(worker.recv(NOFLAGS));
long finish = System.currentTimeMillis();
long timeElapsed = finish - start;
System.out.println(Thread.currentThread().getName() + " - Received " + workload);
System.out.println("Elapsed Time: " + timeElapsed);
}
}
});
workerThread1.setName("worker1");
workerThread1.start();
workerThread.start();
brokerThread.start();
}
}
Metadata
Metadata
Assignees
Labels
No labels