Irgendwelche NIO-Frameworks für .NET?
Gibt es non-blocking IO-frameworks für .NET?
Ich bin auf der Suche nach etwas ähnliches, was Apache Mina und JBoss Netty bietet für Java: ein framework für die Implementierung von hoch skalierbaren Server - und nicht nur die low-level-support, die .NET framework bietet.
EDIT: besser Zu erklären, was ich würde gerne sehen, hier ist ein basic Beispiel, was Sie tun können, mit Mina:
In Mina kann ich implementieren einen ProtocolDecoder wie diese:
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);
}
}
Und ein CommandHandler wie diese:
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.
}
}
Wenn ich starten Sie den server durch Aufruf von
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();
Bekomme ich ein non-blocking server.
Ausgeführt wird, eine einzige (oder zumindest nur wenige) threads, Radfahren durch die alle eingehenden verbindungen, das sammeln der Daten von den sockets und rufen SimpleDecoder.doDecode()
zu sehen, ob es einen vollständigen Befehl auf die Verbindung. Dann wird der Befehl zu CommandHandler.messageReceived()
, und ich kann über die Verarbeitung.
InformationsquelleAutor der Frage Rasmus Faber | 2009-03-15
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie einen Blick auf SuperSocket, http://supersocket.codeplex.com/
Es kann nicht stark sein, wie Mina und Netty, aber es ist eine Art von einfachen Rahmen kann man einfach benutzen können.
InformationsquelleAutor der Antwort Kerry Jiang
Gibt es die XF.Server, die diese Frage sagt, ist Blätterteig. Diese Letzte Frage bietet Ratschläge dazu, wie schreiben leistungsstarkes Netzwerk-code .NETTO (Verwendung von asynchronen sockets, etc).
Gibt es auch eine Vorschau von C# Network Programming auf Google-Bücher, die erörtert, unter anderem die asynchrone socket-Aufrufe.
Diese MSDN-Artikel ist auch interessant, aber bringt dich nicht näher zu einer tatsächlichen Rahmen.
InformationsquelleAutor der Antwort Vinko Vrsalovic
Können Sie Mina direkt in .Net über ikvm.
InformationsquelleAutor der Antwort Todd Stout