WCF или Custom Socket Architecture - PullRequest
       1

WCF или Custom Socket Architecture

3 голосов
/ 21 августа 2010

Я пишу клиент-серверную архитектуру, в которой, возможно, будут сотни клиентов на нескольких виртуальных машинах, в основном в интрасети, но некоторые в других местах.

Каждый клиент будет собирать данные постояннои отправка сообщения на сервер каждую секунду или около того .Каждое сообщение, вероятно, будет иметь длину около 128 символов.

Мой вопрос заключается в том, что для этой архитектуры, где я пишу клиент-сервер в .NET, я должен использовать WCF или какой-то другой код сокета,написано ранее.Мне нужна масштабируемость (которую имеет в виду код сокета), надежность и возможность обрабатывать столько сообщений.

Ответы [ 3 ]

3 голосов
/ 21 августа 2010

Я бы не принял окончательного решения, не представив некоторые доказательства концепции.Создайте очень простой сервис, разместите его и используйте стресс-тест, чтобы получить реальные результаты производительности.Чем проверить результаты в соответствии с вашими требованиями.Вы упомянули количество сообщений, но не упомянули ожидаемое время ответа.В настоящее время обсуждается аналогичный вопрос на форуме MSDN , который жалуется на медленное время ответа WCF по сравнению с сокетами.

Другие требования не упоминаются прямо в вашем посте, поэтому я сделаю некоторые предположения для лучшегопроизводительность:

  • Использовать netTcpBinding - лучшая производительность, двоичное кодирование, требуется .NET сервер / клиенты.Я предполагаю, что вы собираетесь использовать Net.Tcp, потому что другим вашим выбором было прямое программирование сокетов.
  • Не используйте безопасность, если вам не нужно - снижает производительность.Вероятно, это невозможно для клиентов за пределами вашей интрасети.
  • Повторно используйте прокси на клиентах, если это возможно.Открытие TCP-соединения стоит дорого, если вы повторно используете тот же прокси, у вас будет одно соединение на прокси.Это повлияет на создание экземпляров ваших служб - по умолчанию один экземпляр службы будет обрабатывать все запросы от одного прокси.
  • Настройте регулирование службы так, чтобы хост службы был готов для многих клиентов

ТакжеВы должны принять некоторые решения о распределении нагрузки.Для балансировки нагрузки для соединений WCF net.tcp требуются липкие сеансы (сходство сеансов), поэтому после открытия канала клиент всегда вызывает службу на одном и том же сервере (поскольку экземпляр этой службы был создан только на одном сервере).

1 голос
/ 21 августа 2010

100 запросов в секунду - это не так много для службы WCF, особенно с такой небольшой полезной нагрузкой.Но это должно быть достаточно быстро, чтобы настроить простую установку с помощью службы WCF с одним методом echo, просто возвращая входные данные, а затем подключив клиента с кучей потоков и цикла.

Если у вас уже есть работающийВы можете сохранить реализацию сокета, но в противном случае вы можете выбрать WCF и потратить драгоценное время на разработку в другом месте.

0 голосов
/ 21 августа 2010

Из моего опыта работы с WCF я могу сказать, что производительность при высокой нагрузке очень хорошая. В частности, вы можете выбирать между несколькими привязками, чтобы удовлетворить ваши требования для различных сценариев (httpBinding для внешней связи, netPeerTcpBinding в локальной сети, например).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...