Схема организации процессов

Опубликовано в Технологии > Серверные технологии

Как показано на рис. 10.1, в последовательном сервере с установлением логического соединения используется один поток выполнения, который функционирует в цикле неопределенно долгое время, используя один сокет для обработки входящих запросов, а второй, временный сокет — для взаимодействия с клиентом. Поток выполнения ожидает поступления запросов на установление соединения через общепринятый порт, а затем обменивается данными с клиентом через соединение. Кто-то продает активатор microsoft office 2010 мы же готовы его подарить.

Сервер, в котором используется транспортный протокол с установлением логического соединения, выполняет обработку запросов на установление соединения в цикле: он ожидает поступления очередного запроса на установление соединения от клиента через общепринятый порт, принимает этот запрос, выполняет его, закрывает соединение, а затем снова переходит в состояние ожидания. Реализация службы DAYTIME становится особенно простой, поскольку сервер не должен принимать от клиента какой-либо определенный запрос: в этой службе для активизации ответа используется сам факт появления входящего запроса на установление соединения. Поскольку клиент не присылает какой-то определенный запрос, сервер не читает данные из соединения.

схема организации процессов последовательного сервера с установлением логического соединения

10.5. Пример сервера DAYTIME

Пример кода последовательного сервера DAYTIME с установлением логического соединения приведен в файле TCPdaytimed.c.

/*---	
*	Процедура TCPdaytimed - предоставляет доступ к службе DAYTIME
*	по протоколу TCP
*	.	«	«	„
*/
void
TCPdaytimed(int fd) {
char       *pts;	/* Указатель на строку со значением времени */
time_t    now;	/* Текущее время */
char *ctime();
(void) time(Snow); pts = ctime(&now); (void) write(fd, pts, strlen(pts));
}
 

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

Объем кода этого сервера невелик, поскольку вызов процедуры passiveTCP позволяет скрыть тонкости распределения и привязки сокета. В результате вызова процедуры passiveTCP создается ведущий сокет, связанный с общепринятым портом службы DAYTIME. Второй параметр вызова процедуры указывает, что ведущий сокет будет иметь очередь запросов с длиной QLEN, что позволяет операционной системе ставить в очередь запросы на установление соединения, поступающие от QLEN других клиентов, пока сервер занимается формированием ответа на запрос текущего клиента.

После создания ведущего сокета главная процедура сервера входит в бесконечный цикл. При каждом проходе по циклу сервер вызывает функцию accept для получения очередного запроса на установление соединения из ведущего сокета. Чтобы исключить потребление сервером ресурсов во время ожидания запроса на установление соединения от клиента, вызов функции accept блокирует поток сервера до тех пор, пока не поступит запрос. После получения запроса на установление соединения программное обеспечение протокола TCP выполняет трехэтапное квитирование для установления соединения. Как только будет выполнено квитирование и система распределит новый сокет для входящего запроса на установление соединения, функция accept возвратит дескриптор нового сокета, что позволит серверу продолжить работу. Если запрос на установление соединения не поступит, серверный процесс останется заблокированным на неопределенно долгое время в вызове функции accept.

При получении каждого нового запроса на установление соединения в сервере для его обработки вызывается процедура TCPdaytimed. Работа процедуры TCPdaytimed в основном сводится к вызову системных функций time и ctime. Функция time возвращает 32-битовое целое число, которое обозначает текущее время в секундах с начала эпохи Linux. Библиотечная функция ctime принимает целочисленный параметр, обозначающий время в секундах с начала эпохи Linux, и возвращает адрес строки в кодировке ASCII, которая содержит значение времени и даты, представленное в формате, предназначенном для восприятия человеком. Сразу после получения значения времени и даты в виде строки ASCII сервер вызывает функцию write для отправки этой строки клиенту через соединение TCP.

Как только произойдет возврат управления после вызова процедуры TCPdaytimed, главная процедура продолжит выполнение цикла и снова встретит оператор вызова функции accept. Функция accept заблокирует сервер до момента поступления следующего запроса.

Похожие статьи
  • активатор microsoft office 2010 мы же готовы его подарить. Процедура telnet принимает два параметра с указанием имени удаленного компьютера и службы на этом компьютере...." href="/servernie-tehnologii/183-osnova-klienta.html">Основа клиента TELNET
  • активатор microsoft office 2010 мы же готовы его подарить. Эти две реализации описаны в главах 11 и 12. В обеих главах приведены примеры сервера,..." href="/servernie-tehnologii/45-sposoby-raboty.html">Способы обеспечения параллельной работы сервера
  • Мультисервисные серверы (TCP, UDP)