Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Any NIO frameworks for .NET? [closed]

Tags:

Are there any non-blocking IO frameworks for .NET?

I am looking for something similar to what Apache Mina and JBoss Netty provides for Java: a framework for implementing highly scalable servers - not just the low-level support that the .NET framework provides.

EDIT: To better explain what I would like to see, here is a basic example of what you can do with Mina:

In Mina I can implement a ProtocolDecoder like this:

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);   } } 

And a CommandHandler like this:

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.   } } 

If I start the server by calling

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(); 

I will get a non-blocking server.

It will run a single (or at least just a few) threads, cycling through all incoming connections, gathering data from the sockets, and call SimpleDecoder.doDecode() to see if it has a complete command on the connection. Then it will pass the command to CommandHandler.messageReceived(), and I can take over the processing.

like image 590
Rasmus Faber Avatar asked Mar 15 '09 18:03

Rasmus Faber


2 Answers

You can take a look at SuperSocket, http://supersocket.codeplex.com/ It may not be strong like Mina and Netty, but it is kind of simple framework you can use easily.

like image 105
Kerry Jiang Avatar answered Sep 28 '22 18:09

Kerry Jiang


There is the XF.Server, which this question says is flaky. This last question offers advice about how to write high performing networking code in .NET (use async sockets, etc.)

There's also a preview of C# Network Programming on Google Books which discusses, among other things, asynchronous socket calls.

This MSDN article is also interesting, but gets you no closer to an actual framework.

like image 37
Vinko Vrsalovic Avatar answered Sep 28 '22 16:09

Vinko Vrsalovic