是否有适用于.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()
,我可以接管处理。
答案 0 :(得分:6)
你可以看看SuperSocket,http://supersocket.codeplex.com/ 它可能不像Mina和Netty那样强大,但它是一种易于使用的简单框架。
答案 1 :(得分:3)
有XF.Server,this question说的是片状。最后一个问题提供了有关如何在.NET中编写高性能网络代码的建议(使用异步套接字等)
Google Books上还预览了C# Network Programming,其中讨论了异步套接字调用等。
这个MSDN article也很有趣,但是你不能接近实际的框架。
答案 2 :(得分:0)
您可以通过ikvm直接在.Net中使用Mina。