Cómo leer eficientemente desde un socket usando Java NIO
stoy trabajando en una tarea que implica leer las cotizaciones comerciales de socket y necesito lograr una latencia mínima y un alto rendimiento.
omencé con el prototipo java nio más simple posible como este
ByteBuffer buf = ByteBuffer.allocateDirect(BUFFER_SIZE);
try {
buf.clear();
int numBytesRead = socketChannel.read(buf);
if (numBytesRead == -1) {
socketChannel.close();
} else {
buf.flip();
byte[] byteArrived = new byte[buf.remaining];
buf.get(byteArrived,0,byteArrived.length);
// here we send byteArrived to the parser
}
} catch (IOException e) {
}
Supongo que es poco convincente crear una matriz de bytes [] cada vez, pero debido a la falta de conocimiento no sé cómo analizar ByteBuffer (porque necesito desarmar el protocolo de bytes en mensajes y pasarlos a la lógica empresarial). ¿Me puede recomendar cómo evitar la creación masiva de basura?
¿También me gustaría preguntar sobre las mejores prácticas para organizar la lectura de socket con baja latencia y alto rendimiento? Leí sobre LMAX y el marco disruptor y lograron 6 millones de transacciones en un solo hilo.