2009-03-15 15 views
22

.NET用の非ブロックIOフレームワークはありますか?.NET用のNIOフレームワークは何ですか?

Apache MinaJBoss Nettyは、.NETフレームワークが提供する低レベルのサポートだけでなく、スケーラビリティの高いサーバーを実装するためのフレームワークを提供しています。

EDIT:

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

はミナに

私はこのようなProtocolDecoderを実装することができます:はより良い私が見たいのかを説明するには、ここにあなたがミナに何ができるかの基本的な例です。

そして、このような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

ここには、Java用のよく設計されたNIOフレームワークがあります:http://www.jboss.org/netty。私は.Netと同等のものを探しています(そしてRasmusもそうしています)。これは単なる非同期IOではなく、開発を大幅に単純化するフレームワークです。 – jgauffin

+1

ノンブロッキングI/Oは、1日目以降、.NETの一部となっています。何を探していますか? –

+0

.NETの低レベル呼び出しの上にサーバーフレームワークを探しています。 –

答えて

0

で.Netで直接Minaを使用できます。

+0

ミーナを使用している人は、高性能を求めています。あなたはikvmで使用されるminaがうまくいくと思いますか? – bokan

+4

一般に、ノンブロッキングIOは必ずしもパフォーマンスは向上しませんが、スケーラビリティは向上します。ノンブロッキングソケットIOは、接続ごとにスレッドが不要になります。 1つのスレッドで多くの接続を処理すると、複数のスレッドのメモリとコンテキスト切り替えのオーバーヘッドが減少します。 nio操作はIOバインドでCPUバインディングではないので、ivkmによって導入されるオーバーヘッドは無視できると考えられますが、証拠はありません。 –

3

XF.Serverがあります。this questionは薄片であると言います。この最後の質問では、.NETで高性能のネットワークコードを書く方法についてのアドバイスを提供しています(非同期ソケットなどを使用)

Googleブックスでは、とりわけ非同期ソケットコールについて説明するプレビューがC# Network Programmingです。

このMSDN articleも興味深いですが、実際のフレームワークに近づくことはありません。

+0

あなたの情報、特にリンクありがとう:http://stackoverflow.com/questions/319732/tips-techniques-for-high-performance-c-server-sockets – Dodd

4

SuperSocket、http://supersocket.codeplex.com/ MinaとNettyのように強くないかもしれませんが、簡単に使用できるシンプルなフレームワークです。

関連する問題