.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()
れ、処理を引き継ぐことができます。