Подтвердить что ты не робот

Любые рамки NIO для .NET?

Существуют ли какие-либо неблокирующие структуры ввода-вывода для .NET?

Я ищу что-то похожее на то, что Apache Mina и JBoss Netty обеспечивает Java: инфраструктуру для реализации масштабируемых серверов - не только поддержку низкого уровня, предоставляемую платформой .NET.

РЕДАКТИРОВАТЬ: Чтобы лучше объяснить, что я хотел бы видеть, вот основной пример того, что вы можете сделать с Миной:

В 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(), и я могу взять на себя обработку.

4b9b3361

Ответ 1

Вы можете взглянуть на SuperSocket, http://supersocket.codeplex.com/ Он может быть не очень сильным, как Mina и Netty, но это простая структура, которую вы можете легко использовать.

Ответ 2

Существует XF.Server, который этот вопрос говорит, что это сломанный, Этот последний вопрос дает советы о том, как писать высокопроизводительный сетевой код в .NET(использовать асинхронные сокеты и т.д.).

Здесь также есть предварительный просмотр Сетевое программирование на С# в Google Книгах, где обсуждаются, в частности, асинхронные вызовы сокетов.

Эта статья статья MSDN также интересна, но не дает вам приблизиться к реальной структуре.

Ответ 3

Вы можете использовать Mina непосредственно в .Net через ikvm.