25

.NET 是否有任何非阻塞 IO 框架?

我正在寻找类似于Apache MinaJBoss Netty为 Java 提供的东西:一个用于实现高度可扩展的服务器的框架——而不仅仅是 .NET 框架提供的低级支持。

编辑:为了更好地解释我希望看到的内容,这里有一个基本示例,说明您可以使用 Mina 做什么:

在 Mina 中,我可以像这样实现 ProtocolDecoder:

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

还有一个像这样的 CommandHandler:

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

如果我通过调用启动服务器

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

我将获得一个非阻塞服务器。

它将运行一个(或至少几个)线程,循环遍历所有传入的连接,从套接字收集数据,并调用SimpleDecoder.doDecode()以查看它是否在连接上有完整的命令。然后它将命令传递给CommandHandler.messageReceived(),我可以接管处理。

4

3 回答 3

6

你可以看看 SuperSocket,http ://supersocket.codeplex.com/ 它可能不像 Mina 和 Netty 那样强大,但它是一种简单的框架,你可以轻松使用。

于 2010-08-19T02:58:02.577 回答
3

XF.Server这个问题说它是片状的。最后一个问题提供了有关如何在 .NET 中编写高性能网络代码的建议(使用异步套接字等)

Google Books 上还有C# Network Programming的预览版,其中讨论了异步套接字调用等内容。

这篇MSDN 文章也很有趣,但不会让您更接近实际的框架。

于 2009-10-04T07:37:11.333 回答
0

您可以通过ikvm在 .Net 中直接使用 Mina 。

于 2009-04-14T22:58:32.157 回答