Тестирование сокетов Linux - PullRequest
       3

Тестирование сокетов Linux

1 голос
/ 25 сентября 2010

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

Мне нужно проверить, какова производительность сервера при наличии нескольких запросов на подключение и когда сервер отправляет данные нескольким клиентам.У меня вопрос, как я могу имитировать одновременные запросы соединения от ряда клиентов для сервера?Создаю ли я несколько потоков для запроса, несколько процессов или какие-то другие способы его тестирования?

Спасибо.

Ответы [ 2 ]

7 голосов
/ 25 сентября 2010

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

 for i in {0..1000} ; ./myprogram serverip & done

В некоторых случаяхпротокол основан на тексте, а взаимодействие или тестирование просты, поэтому мне не нужно писать myprogram, а просто использовать netcat , как при выполнении nc serverip < input >/dev/null

Если всенужно протестировать потоковые данные на вашем клиенте, я бы начал с netcat и продолжил свой путь оттуда.

Этот подход подходит для моих нужд, обычно мне не нужно тестировать больше параллелизма, чем несколькотысяч клиентов.Если вам нужна большая масштабируемость, вам, вероятно, придется написать клиентский симулятор с использованием io multiplexing (epoll), чтобы каждый экземпляр имитировал как можно больше взаимодействий - и вам придется проводить более контролируемые тесты, чтобы найти пределыВаш клиент.

Не смешивайте тестирование производительности с функциональным тестированием.Хотя в тестовой среде вы можете получить потрясающую производительность, в реальной среде она может сильно отличаться.Например, клиенты будут плохо себя вести, они будут отключаться в самое неподходящее время.Они могут отправить вам вредоносные данные.Они могут быть медленными, приводя к созданию внутренних очередей на сервере или оставляя вас с тысячами, казалось бы, бездействующих соединений (killall -STOP nc, в то время как в процессе отправки данных на тестовые клиенты могут показаться вам интересные вещи)

0 голосов
/ 14 ноября 2013

Вы можете сделать это, используя два потока: один для отправки запроса и другой для получения ответа.

Чтобы смоделировать несколько клиентов, вы можете создать несколько подчиненных интерфейсов, используя команду ifconfig в скрипте или ioctl в вашей программе c.

Для отправки данных с клиента вы можете создать массив из нескольких сокетов и связать их с различными IP-адресами подинтерфейса и циклически пройти по ним для отправки данных, а также использовать select или poll для получения данных с сервера.

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