use of org.agrona.nio.NioSelectedKeySet in project aeron by real-logic.
the class SendHackSelectReceiveUdpPing method run.
private void run() throws IOException {
receiveChannel = DatagramChannel.open();
Common.init(receiveChannel);
receiveChannel.bind(new InetSocketAddress("localhost", Common.PONG_PORT));
final DatagramChannel sendChannel = DatagramChannel.open();
Common.init(sendChannel);
final Selector selector = Selector.open();
receiveChannel.register(selector, OP_READ, this);
final NioSelectedKeySet keySet = Common.keySet(selector);
final AtomicBoolean running = new AtomicBoolean(true);
SigInt.register(() -> running.set(false));
while (running.get()) {
measureRoundTrip(HISTOGRAM, SEND_ADDRESS, buffer, sendChannel, selector, keySet, running);
HISTOGRAM.reset();
System.gc();
LockSupport.parkNanos(1000 * 1000 * 1000);
}
}
use of org.agrona.nio.NioSelectedKeySet in project aeron by real-logic.
the class Common method keySet.
public static NioSelectedKeySet keySet(final Selector selector) {
NioSelectedKeySet tmpSet = null;
if (null != PUBLIC_SELECTED_KEYS_FIELD) {
try {
tmpSet = new NioSelectedKeySet();
SELECTED_KEYS_FIELD.set(selector, tmpSet);
PUBLIC_SELECTED_KEYS_FIELD.set(selector, tmpSet);
} catch (final Exception ignore) {
tmpSet = null;
}
}
return tmpSet;
}
use of org.agrona.nio.NioSelectedKeySet in project Aeron by real-logic.
the class Common method keySet.
static NioSelectedKeySet keySet(final Selector selector) {
NioSelectedKeySet tmpSet = null;
if (null != PUBLIC_SELECTED_KEYS_FIELD) {
try {
tmpSet = new NioSelectedKeySet();
SELECTED_KEYS_FIELD.set(selector, tmpSet);
PUBLIC_SELECTED_KEYS_FIELD.set(selector, tmpSet);
} catch (final Exception ignore) {
tmpSet = null;
}
}
return tmpSet;
}
use of org.agrona.nio.NioSelectedKeySet in project aeron by real-logic.
the class HackSelectReceiveSendUdpPong method run.
private void run() throws IOException {
final InetSocketAddress sendAddress = new InetSocketAddress("localhost", Common.PONG_PORT);
final ByteBuffer buffer = ByteBuffer.allocateDirect(Configuration.MTU_LENGTH_DEFAULT);
final DatagramChannel receiveChannel = DatagramChannel.open();
Common.init(receiveChannel);
receiveChannel.bind(new InetSocketAddress("localhost", Common.PING_PORT));
final DatagramChannel sendChannel = DatagramChannel.open();
Common.init(sendChannel);
final Selector selector = Selector.open();
final NioSelectedKeySet keySet = Common.keySet(selector);
final ToIntFunction<SelectionKey> handler = (key) -> {
try {
buffer.clear();
receiveChannel.receive(buffer);
final long receivedSequenceNumber = buffer.getLong(0);
final long receivedTimestamp = buffer.getLong(SIZE_OF_LONG);
buffer.clear();
buffer.putLong(receivedSequenceNumber);
buffer.putLong(receivedTimestamp);
buffer.flip();
sendChannel.send(buffer, sendAddress);
} catch (final IOException ex) {
ex.printStackTrace();
}
return 1;
};
receiveChannel.register(selector, OP_READ, null);
final AtomicBoolean running = new AtomicBoolean(true);
SigInt.register(() -> running.set(false));
while (true) {
while (selector.selectNow() == 0) {
if (!running.get()) {
return;
}
}
keySet.forEach(handler);
}
}
use of org.agrona.nio.NioSelectedKeySet in project Aeron by real-logic.
the class SendHackSelectReceiveUdpPing method run.
private void run() throws IOException {
receiveChannel = DatagramChannel.open();
Common.init(receiveChannel);
receiveChannel.bind(new InetSocketAddress("localhost", Common.PONG_PORT));
final DatagramChannel sendChannel = DatagramChannel.open();
Common.init(sendChannel);
final Selector selector = Selector.open();
receiveChannel.register(selector, OP_READ, this);
final NioSelectedKeySet keySet = Common.keySet(selector);
final AtomicBoolean running = new AtomicBoolean(true);
SigInt.register(() -> running.set(false));
while (running.get()) {
measureRoundTrip(HISTOGRAM, SEND_ADDRESS, buffer, sendChannel, selector, keySet, running);
HISTOGRAM.reset();
System.gc();
LockSupport.parkNanos(1000 * 1000 * 1000);
}
}
Aggregations