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 を見ること できます。

于 2010-08-19T02:58:02.577 に答える
3

XF.Serverがあり、この質問は不安定だと言っています。この最後の質問では、.NET でパフォーマンスの高いネットワーク コードを記述する方法 (非同期ソケットを使用するなど) に関するアドバイスを提供します。

また、Google Books にはC# Network Programmingのプレビューがあり、特に非同期ソケット呼び出しについて説明しています。

このMSDN の記事も興味深いものですが、実際のフレームワークには近づきません。

于 2009-10-04T07:37:11.333 に答える
0

Mina は、 ikvmを介して .Net で直接使用できます。

于 2009-04-14T22:58:32.157 に答える