Czy istnieją nie blokujące struktury IO dla .NET?Dowolne środowiska NIO dla .NET?
Szukam czegoś podobnego do tego, co Apache Mina i JBoss Netty zapewnia Javę: platformę do implementacji wysoce skalowalnych serwerów - nie tylko wsparcie niskiego poziomu obsługiwane przez platformę .NET.
EDIT: Aby lepiej wyjaśnić, co chciałbym zobaczyć, tutaj jest podstawowym przykładem tego, co można zrobić z Mina:
w Mina mogę wdrożyć ProtocolDecoder takiego:
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);
}
}
I CommandHandler tak:
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.
}
}
Gdybym uruchomić serwer wywołując
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();
Otrzymam serwer nieblokujący.
Uruchamia pojedyncze (lub przynajmniej kilka) wątków, przechodzi przez wszystkie połączenia przychodzące, zbiera dane z gniazd i wywołuje SimpleDecoder.doDecode()
, aby sprawdzić, czy ma pełne polecenie połączenia. Następnie przekaże komendę do CommandHandler.messageReceived()
i mogę przejąć przetwarzanie.
Oto dobrze zaprojektowane środowisko NIO dla Javy: http://www.jboss.org/netty. Szukam odpowiednika dla .Net (i przypuszczam, że Rasmus też). To nie tylko asynchroniczne IO, ale także framework, który znacznie upraszcza programowanie. – jgauffin
Non-blocking I/O jest częścią .NET od 1. dnia. Czego dokładnie szukasz? –
Poszukuję ram serwerowych na szczycie wywołań niskiego poziomu w .NET. –