Как протестировать реализацию TCP-сервера?
-
22-07-2019 - |
Вопрос
Я написал реализацию TCP-сервера, с помощью которой создал приложение, работающее как эхо-служба TCP.
Теперь я хочу протестировать этот эхо-сервер с точки зрения
- Сколько соединений он может обработать
- Каково время ответа
- Сколько памяти и процессора он использует
Пожалуйста, можете ли вы предложить какой-либо стандартный метод/инструменты для тестирования этого эхо-сервера.Я понимаю, что реализация как TCP, так и эхо-сервера является довольно стандартной практикой, поэтому я надеюсь найти проверенные инструменты для ее тестирования.
P.S.:Я могу написать собственное тестовое приложение, но не хочу этого делать, потому что, если я увижу какую-то проблему, мне нужно быть уверенным, что это мой сервер делает это неправильно.Я не хочу сначала тестировать своего тестового клиента.
Я написал эту реализацию, используя C# и .NET 3.5, хотя считаю, что это не имеет значения применительно к вопросу.
Решение
У меня есть бесплатный инструмент, который может вам помочь.Я использую его для тестирования серверов, созданных с использованием моей серверной платформы 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++, поэтому я так и не удосужился изменить эту тестовую программу. .
Другие советы
В вашей ситуации раньше я использовал FunkLoad.Если вы можете написать небольшой клиент как фрагмент кода Python, то FunkLoad запустит на сервере столько клиентов, сколько вы захотите, и построите график результатов:
Полностью проработанный пример для серии тестовых серверов является центральным элементом второго издания моей книги «Основы сетевого программирования на Python» на случай, если его общедоступный репозиторий исходного кода окажет какую-либо помощь:
https://github.com/brandon-rhodes/fopnp/tree/m/py2/chapter07