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

Написание высоко масштабируемого сервера TCP/IP в С# 5 с шаблоном async/await?

Мне поручено разработать довольно простой TCP/IP-сервер, который должен принимать соединения от нескольких клиентов. Он должен быть написан на С#, и я использую .NET 4.5. Тем не менее, я не уверен, что такое "современное состояние" для масштабирования сервера/клиента TCP/IP в .NET 4.5.

Я видел это сообщение: Как написать масштабируемый сервер Tcp/Ip. Но это относится к .NET 2.0 и 3.5 и не упоминает шаблон async/await.

Я могу написать сервер "старый способ"... но я хочу знать, что такое "новый способ".

  • Каков наилучший способ использования новых методов Async для Socket, TcpClient или TcpListener для создания масштабируемого сервера на С#?
  • Используют ли новые методы Async использование портов ввода-вывода ввода/вывода?
  • Повышает эффективность вашего собственного Socket-прослушивателя или класс TcpListener/TcpClient довольно хорош сейчас?

EDIT: Дополнительные вопросы.

4b9b3361

Ответ 1

Каков наилучший способ использования новых методов Async для Socket, TcpClient или TcpListener для создания масштабируемого сервера на С#?

На Socket нет новых методов async; методы с именем *Async on Socket являются специальным набором API для уменьшения использования памяти. TcpClient и TcpListener получили некоторые новые методы async.

Если вам нужна лучшая масштабируемость, вы, вероятно, лучше всего используете пользовательские ожидания Stephen Toub для Socket. Если вам нужен самый простой код, вам, вероятно, лучше использовать TcpClient и TcpListener.

Влияют ли новые методы Async на порты завершения ввода/вывода?

Да, как и большинство других асинхронных API в BCL. AFAIK, класс Stream является единственным, который может не использовать IOCP; все остальные методы *Begin/*End/*Async используют IOCP.

Повышает эффективность вашего собственного Socket-прослушивателя или класс TcpListener/TcpClient довольно хорош сейчас?

Классы довольно хороши, как и они. Стивен Тууб имеет сообщение в блоге, которое немного более эффективно с точки зрения использования памяти.

Ответ 2

С .net4.5 вы можете использовать ключевое слово async/await для сборки tcp-сервера. Вот пример кода. async ждет tcp-сервер

Он может принимать более 10K соединений. tcp server