Как проверить реализацию TCP-сервера? - PullRequest
4 голосов
/ 01 декабря 2009

Я написал реализацию сервера TCP, с помощью которой создал приложение, работающее в качестве службы TCP echo.

Теперь я хочу протестировать этот эхо-сервер с точки зрения

  • Сколько подключений он может обработать
  • Что такое время отклика
  • Сколько памяти и процессора он использует

Подскажите, пожалуйста, какой-нибудь стандартный метод / инструмент для тестирования этого эхо-сервера. Я понимаю, что реализация TCP и эхо-сервера является довольно стандартной практикой, поэтому я надеюсь найти проверенные инструменты для ее проверки.

P.S .: Я могу написать свое собственное тестовое приложение, но я не хочу этого делать, потому что, если я вижу какую-то проблему, я должен быть уверен, что это мой сервер делает это неправильно. Я не хочу в конечном итоге тестировать мой тестовый клиент.

Я написал эту реализацию с использованием C # и .NET 3.5, хотя считаю, что со ссылкой на вопрос это не имеет значения.

Ответы [ 2 ]

5 голосов
/ 01 декабря 2009

У меня есть бесплатный инструмент, который может вам помочь. Я использую его для тестирования серверов, построенных на моей C ++ серверной платформе. Инструмент доступен здесь: http://www.lenholgate.com/blog/2005/11/windows-tcpip-server-performance.html.. Он позволяет создавать настраиваемое количество подключений к целевому серверу с настраиваемой скоростью, а затем отправлять данные по каждому соединению (снова с настраиваемой скоростью).

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

После того, как вы протестировали свой TCP-код, вы можете обнаружить, что вам нужно протестировать протокол, который поддерживает ваш сервер. Я написал тестовый инструмент для подобной ситуации на C #, который доступен на CodeProject (http://www.codeproject.com/KB/IP/testingsocketservers.aspx).). Это позволяет вам написать «плагин» для поддержки вашего протокола и обрабатывать не зависящие от протокола вещи (множество соединений, разрыв сообщений так что вы получаете фрагментированные чтения и т. д.). Дизайн довольно неприятный для каждого соединения, и для большего количества соединений было бы лучше переопределить что-то, используя асинхронный дизайн, но у меня есть инструменты C ++ для так что я никогда не удосужился изменить эту тестовую программу ...

0 голосов
/ 17 июля 2014

В вашей прежней ситуации я использовал FunkLoad. Если вы можете написать небольшой клиент в виде фрагмента кода Python, тогда FunkLoad запустит столько данных на сервере, сколько пожелает, и отобразит результаты:

https://funkload.nuxeo.org/

Полностью проработанный пример с серией тестовых серверов является центральным элементом второго издания моей книги «Основы сетевого программирования Python», если его общедоступный репозиторий исходного кода чем-нибудь поможет:

https://github.com/brandon-rhodes/fopnp/tree/m/py2/chapter07

...