30.3. Тестовый клиент TCP

30.3. Тестовый клиент TCP

В листинге 30.1[1] показан клиент, который будет использоваться для тестирования всех вариаций нашего сервера.

Листинг 30.1. Код клиента TCP для проверки различных версий сервера

//server/client.с

 1 #include "unp.h"

 2 #define MAXN 16384 /* максимальное количество байтов, которые могут быть

                         запрошены клиентом от сервера */

 3 int

 4 main(int argc, char **argv)

 5 {

 6  int i, j, fd, nchildren, nloops, nbytes;

 7  pid_t pid;

 8  ssize_t n,

 9   char request[MAXLINE], reply[MAXN];

10  if (argc != 6)

11   err_quit("usage: client <hostname or IPaddr> <port> <#children> "

12    "<#loops/child> <#bytes/request>");

13  nchildren = atoi(argv[3]);

14  nloops = atoi(argv[4]);

15  nbytes = atoi(argv[5]);

16  snprintf(request, sizeof(request), "%d ", nbytes); /* в конце

                                            символ новой строки */

17  for (i = 0; i < nchildren; i++) {

18   if ((pid = Fork()) == 0) { /* дочерний процесс */

19    for (j = 0; j < nloops; j++) {

20     fd = Tcp_connect(argv[1], argv[2]);

21     Write(fd, request, strlen(request));

22     if ((n = Readn(fd, reply, nbytes)) != nbytes)

23      err_quit("server returned %d bytes", n);

24     Close(fd); /* состояние TIME_WAIT на стороне клиента,

                     а не сервера */

25    }

26    printf("child %d done ", i);

27    exit(0);

28   }

29   /* родительский процесс снова вызывает функцию fork */

30  }

31  while (wait(NULL) > 0) /* теперь родитель ждет завершения всех

                              дочерних процессов */

32   ;

33  if (errno != ECHILD)

34   err_sys("wait error");

35  exit(0);

36 }

10-12 Каждый раз при запуске клиента мы задаем имя узла или IP-адрес сервера, порт сервера, количество дочерних процессов, порождаемых функцией fork (что позволяет нам инициировать несколько одновременных соединений с сервером), количество запросов, которое каждый дочерний процесс должен посылать серверу, и количество байтов, отправляемых сервером в ответ на каждый запрос.

17-30 Родительский процесс вызывает функцию fork для порождения каждого дочернего процесса, и каждый дочерний процесс устанавливает указанное количество соединений с сервером. По каждому соединению дочерний процесс посылает запрос, задавая количество байтов, которое должен вернуть сервер, а затем дочерний процесс считывает это количество данных с сервера. Родительский процесс просто ждет завершения выполнения всех дочерних процессов. Обратите внимание, что клиент закрывает каждое соединение TCP, таким образом состояние TCP TIME_WAIT имеет место на стороне клиента, а не на стороне сервера. Это отличает наше клиент-серверное соединение от обычного соединения HTTP.

При тестировании различных серверов из этой главы мы запускали клиент следующим образом:

% client 192.168.1.20 8888 5 500 4000

Таким образом создается 2500 соединений TCP с сервером: по 500 соединений от каждого из 5 дочерних процессов. По каждому соединению от клиента к серверу посылается 5 байт ("4000 "), а от сервера клиенту передается 4000 байт. Мы запускаем клиент на двух различных узлах, соединяясь с одним и тем же сервером, что дает в сумме 5000 соединений TCP, причем максимальное количество одновременных соединений с сервером в любой момент времени равно 10.

ПРИМЕЧАНИЕ

Для проверки различных веб-серверов существуют изощренные контрольные тесты. Один из них называется WebStone. Информация о нем находится в свободном доступе по адресу http://www.mindcraft.com/webstone. Для общего сравнения различных альтернативных устройств сервера, которые мы рассматриваем в этой главе, нам не нужны столь сложные тесты.

Теперь мы представим девять различных вариантов устройства сервера.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Многопротокольный клиент SIM

Из книги 200 лучших программ для Linux автора Яремчук Сергей Акимович

Многопротокольный клиент SIM Simple Instant Messenger (SIM, http://sim-im.org/) – еще один многопротокольный клиент обмена сообщениями с открытыми исходными текстами, работающий, кроме Linux, на платформах, поддерживаемых используемой им библиотекой Qt: Microsoft Windows, FreeBSD и Mac OS X. Основатель проекта


Клиент Ekiga

Из книги Delphi. Учимся на примерах автора Парижский Сергей Михайлович

Клиент Ekiga В дистрибутиве Ubuntu в качестве приложения для IP-телефонии и проведения видеоконференций используется Ekiga (http://www.ekiga.org/). Первая версия этой программы была написана Демиеном Сандрасом, который сегодня является одним из руководителей проекта, в качестве дипломной


Глава 18 FTP-клиент

Из книги Эффективное делопроизводство автора Пташинский Владимир Сергеевич

Глава 18 FTP-клиент Постановка задачи Разработать FTP-клиент. Программа должна соединяться с FTP-cepвером, проходить аутентификацию и предоставлять пользователю возможность работать с файлами, которые находятся на сервере. У пользователя должна быть возможность передавать и


Почтовый клиент

Из книги Бесплатные разговоры через Интернет автора Фрузоров Сергей

Почтовый клиент В переводе с компьютерного жаргона это простая программа для приема и отправки электронной почты. Это нужная операция, поэтому программ такого рода множество. Однако Outlook – самая простая и удобная, что нетрудно доказать.Во-первых, Outlook универсален: он


Программа-клиент

Из книги Наглядный самоучитель работы на нетбуке автора Сенкевич Г. Е.

Программа-клиент Программа-клиент бесплатной версии Roger Wilco отличается тем, что в ее окне отсутствует вкладка Host Base Station (Обосноваться на базовой станции). Это естественно, поскольку сервер запускается отдельно и настраивается в режиме командной строки. Тем не менее,


Делаем тестовый звонок

Из книги Удвоение продаж в интернет-магазине автора Парабеллум Андрей Алексеевич

Делаем тестовый звонок Перед тем как к кому-то подключиться и начать разговор, Skype предлагает сделать тестовый звонок, чтобы вы смогли убедиться, что ваше оборудование нормально работает в системе Skype. Для этого предназначена кнопка Тест — Звонок Skype (рис. 5.11). После


QIP — альтернативный ICQ-клиент

Из книги Linux: Полное руководство автора Колисниченко Денис Николаевич

QIP — альтернативный ICQ-клиент Возможно, для общения в ICQ вам больше понравится альтернативный ICQ-клиент — программа QIP. Существуют две версии этой программы: QIP 2005 и OIP Infium. На нетбуке предпочтение стоит отдать более простой и компактной версии — QIP 2005.В программе QIP 2005 есть


Тестовый подъем цен на один день

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

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


27.3.8. Программа-клиент

Из книги Введение в QNX/Neutrino 2. Руководство по программированию приложений реального времени в QNX Realtime Platform автора Кёртен Роб


Клиент-сервер

Из книги Недокументированные и малоизвестные возможности Windows XP автора Клименко Роман Александрович

Клиент-сервер Средства локального доступа.* Локальная заглушка TCP/IP. Для многоуровневых серверных приложений и других клиентов доступ к локальному серверу на любой поддерживаемой платформе осуществляется через протокол TCP/IP: даже при отсутствии сетевой карты соединение


Клиент

Из книги Linux и UNIX: программирование в shell. Руководство разработчика. автора Тейнсли Дэвид

Клиент Клиент, который желает послать запрос серверу, блокируется до тех пор, пока сервер не завершит обработку запроса. Затем, после завершения сервером обработки запроса, клиент разблокируется, чтобы принять «ответ».Это подразумевает обеспечение двух условий: клиент


DHCP-клиент

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

DHCP-клиент Данная служба используется при существовании в сети DHCP-сервера. DHCP-сервер предназначен для выдачи всем компьютерам, не имеющим постоянного IP-адреса, временного IP-адреса, чтобы они могли работать в сети. Служба является отличным средством автоматизирования


DNS-клиент

Из книги автора

DNS-клиент Служба предназначена для получения IP-адреса удаленного компьютера при известном доменном или url-адресе этого компьютера (например, www.mail.ru). При этом процесс получения IP-адреса удаленного компьютера реализуется благодаря взаимодействию службы DNS-клиент с


Веб-клиент

Из книги автора

Веб-клиент Служба позволяет изменять или добавлять файлы, хранящиеся в Интернете. Если эта стандартная функция Windows вам не нужна, то службу лучше отключить.Служба Веб-клиент занимает около 800 Кбайт оперативной памяти и запускается с правами локальной службы (NT


11.1.3. Тестовый файл

Из книги автора

11.1.3. Тестовый файл Ниже приведен фрагмент файла video.txt, хранящего информацию из базы данных фирмы, которая занимается прокатом видеокассет. В перечень вошли видеокассеты, которые предлагались на протяжении последнего квартала. Поля файла имеют следующее


26.9. Веб-клиент и одновременный доступ

Из книги автора

26.9. Веб-клиент и одновременный доступ Изменим код нашего веб-клиента из раздела 26.6: уберем вызов функции Solaris thr_join и заменим его вызовом функции pthread_join. Как сказано в разделе 26.6, теперь нам нужно точно указать, завершения какого потока мы ждем. Для этого мы используем