¿Hay marcos IO no bloqueantes para .NET?¿Todos los marcos de NIO para .NET?
Estoy buscando algo similar a lo que Apache Mina y JBoss Netty proporciona para Java: un marco para implementar servidores altamente escalables, no solo el bajo nivel de soporte que proporciona .NET framework.
EDIT: para explicar mejor lo que me gustaría ver, aquí es un ejemplo básico de lo que puede hacer con Mina:
En Mina puedo implementar un ProtocolDecoder así:
public class SimpleDecoder extends CumulativeProtocolDecoder {
protected boolean doDecode(IoSession session, IoBuffer in, ProtocolDecoderOutput out) throws Exception {
if (in.remaining() < 4)
return false;
int length = in.getInt();
if(in.remaining() < 4 + length)
return false;
Command command = new Command(in.asInputStream());
out.write(command);
}
}
Y un CommandHandler así:
public abstract class CommandHandler extends IoHandlerAdapter{
public void messageReceived(IoSession session, Object message) throws IOException, CloneNotSupportedException {
Command command = (Command) message;
// Handle command. Probably by putting it in a workqueue.
}
}
si comienzo el servidor llamando
CommandHandler handler = new CommandHandler();
NioSocketAcceptor acceptor = new NioSocketAcceptor();
acceptor.getFilterChain().addLast("protocol", new ProtocolCodecFilter(new SimpleDecoder(false)));
acceptor.setLocalAddress(new InetSocketAddress(port));
acceptor.setHandler(handler);
acceptor.bind();
Voy a obtener un servidor sin bloqueo.
Ejecutará un único hilo (o al menos unos pocos), recorrerá todas las conexiones entrantes, recopilará datos de los sockets y llamará al SimpleDecoder.doDecode()
para ver si tiene un comando completo en la conexión. Luego, pasará el comando al CommandHandler.messageReceived()
y yo puedo encargarme del procesamiento.
Aquí hay un marco NIO bien diseñado para Java: http://www.jboss.org/netty. Estoy buscando un equivalente para .Net (y supongo que Rasmus también). No es solo un IO asíncrono sino un framework en la parte superior que simplifica enormemente el desarrollo. – jgauffin
La E/S sin bloqueo ha sido parte de .NET desde el día 1. ¿Qué está buscando exactamente? –
Estoy buscando un servidor-framework además de las llamadas de bajo nivel en .NET. –