- Создать сокет и привязать его к общепринятому порту предоставляемой службы. Добавить сокет к списку сокетов, через которые может осуществляться ввод/вывод. обратный клапан для воды оптом
- Использовать функцию select для получения информации о готовности существующих сокетов к вводу/выводу.
- Если готов первоначальный сокет, использовать функцию accept для получения очередного запроса на установление соединения и добавить новый сокет к списку сокетов, через которые может осуществляться ввод/вывод.
- Если готов сокет, отличный от первоначального, использовать функцию recv или read для получения очередного запроса, сформировать ответ и передать ответ клиенту с использованием функции send или write.
- Продолжить обработку запросов, начиная с приведенного выше этапа 2.
8.27. Области применения серверов различных типов
- Последовательный или параллельный. Последовательные серверы проще в проектировании, реализации и сопровождении, но параллельные серверы могут обеспечить более быстрый отклик на запросы. Последовательная реализация применяется, если время обработки запросов невелико и последовательное решение обеспечивает достаточно быстрое время отклика для рассматриваемого приложения.
- Действительно параллельный или псевдопараллельный. В сервере с одним потоком выполнения для поддержки сразу нескольких соединений может применяться асинхронный ввод/вывод, а многопотоковая реализация, основанная на использовании нескольких однопотоковых процессов или нескольких потоков в одном процессе, позволяет автоматически обеспечить параллельную работу с использованием средств операционной системы. Однопотоковое, псевдопараллельное решение применяется, если создание или переключение между потоками требует больших затрат, а сервер должен обеспечить совместное использование данных или обмен данными между соединениями. Многопотоковое решение применяется, если сервер должен обеспечить совместное использование или обмен данными между соединениями, а использование потоков не требует больших затрат. Мультипроцессное решение применяется, если каждый ведомый поток может работать в изоляции от других; такое решение может также применяться для достижения максимального распараллеливания (например, в многопроцессорной системе).
- С установлением или без установления логического соединения. Поскольку доступ с установлением логического соединения подразумевает использование протокола TCP, он также подразумевает и надежную доставку, а транспортный протокол без установления логического соединения (UDP) не может обеспечить надежную доставку. При использовании транспортного протокола без установления логического соединения требуемая надежность может быть достигнута, только если функции повышения надежности реализованы в прикладном протоколе (что почти никогда не встречается) или каждый клиент обращается к своему серверу по локальной сети, которая характеризуется исключительно низкими потерями и отсутствием переупорядочения пакетов. Если между клиентом и сервером лежит распределенная сеть, для связи между ними должен применяться транспортный протокол с установлением логического соединения. Клиент и сервер без установления логического соединения ни в коем случае нельзя переносить в среду глобальной сети без проверки способности прикладного протокола обеспечить требуемую надежность.
