c# - 任何用于 .NET 的 NIO 框架?

标签 c# .net frameworks nio

<分区>

是否有适用于 .NET 的非阻塞 IO 框架?

我正在寻找类似于 Apache Mina 的东西和 JBoss 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(),我可以接管处理。

最佳答案

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

关于c# - 任何用于 .NET 的 NIO 框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/648282/

相关文章:

java - 开箱即用 - Web 服务 - 数据库 - 网页/移动访问

c# - 如何正确使用SecRecord(KeyChain)?

c# - 如何在MVC中实现多个下拉列表

.net - 如何使用 WPF 创建看起来像 Windows 7 中的通知区域窗口的 Windows?

.net - 在 C# 中覆盖 ServicePointManager.ServerCertificateValidationCallback 时如何调用默认证书检查?

java - 玩2模板如何访问列表类型的实体成员

c# - asp.net mvc 布局逻辑的最佳位置在哪里

c# - MySqlCommand Prepare() 永远不会将 IsPrepared 设置为 true

c# - 在 if 语句中使用 'if (variable == true)' 与 'if (variable)' 有什么不同吗?

ios - undefined symbol : _OBJC_CLASS_$_FIRAnalytics