Учебники

Unix Socket — модель клиент-сервер

Большинство сетевых приложений используют архитектуру клиент-сервер, которая относится к двум процессам или двум приложениям, которые взаимодействуют друг с другом для обмена некоторой информацией. Один из двух процессов действует как клиентский процесс, а другой — как сервер.

Процесс клиента

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

Например , Internet Browser работает как клиентское приложение, которое отправляет запрос на веб-сервер для получения одной веб-страницы HTML.

Процесс сервера

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

Пример — веб-сервер продолжает ожидать запросов от интернет-браузеров и, как только он получает любой запрос от браузера, он берет запрошенную HTML-страницу и отправляет ее обратно в этот браузер.

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

2-х и 3-х уровневая архитектура

Существует два типа клиент-серверных архитектур:

  • Двухуровневая архитектура. В этой архитектуре клиент напрямую взаимодействует с сервером. Этот тип архитектуры может иметь некоторые дыры в безопасности и проблемы с производительностью. Internet Explorer и веб-сервер работают на двухуровневой архитектуре. Здесь проблемы безопасности решаются с помощью Secure Socket Layer (SSL).

  • 3-уровневые архитектуры. В этой архитектуре между клиентом и сервером находится еще одно программное обеспечение. Это промежуточное программное обеспечение называется промежуточным программным обеспечением. Промежуточное программное обеспечение используется для выполнения всех проверок безопасности и балансировки нагрузки в случае большой нагрузки. Промежуточное программное обеспечение принимает все запросы от клиента и после выполнения требуемой аутентификации передает этот запрос на сервер. Затем сервер выполняет необходимую обработку и отправляет ответ обратно промежуточному программному обеспечению, и, наконец, промежуточное программное обеспечение передает этот ответ клиенту. Если вы хотите реализовать 3-уровневую архитектуру, вы можете хранить любое промежуточное программное обеспечение, такое как Web Logic или WebSphere, между вашим веб-сервером и веб-браузером.

Двухуровневая архитектура. В этой архитектуре клиент напрямую взаимодействует с сервером. Этот тип архитектуры может иметь некоторые дыры в безопасности и проблемы с производительностью. Internet Explorer и веб-сервер работают на двухуровневой архитектуре. Здесь проблемы безопасности решаются с помощью Secure Socket Layer (SSL).

3-уровневые архитектуры. В этой архитектуре между клиентом и сервером находится еще одно программное обеспечение. Это промежуточное программное обеспечение называется промежуточным программным обеспечением. Промежуточное программное обеспечение используется для выполнения всех проверок безопасности и балансировки нагрузки в случае большой нагрузки. Промежуточное программное обеспечение принимает все запросы от клиента и после выполнения требуемой аутентификации передает этот запрос на сервер. Затем сервер выполняет необходимую обработку и отправляет ответ обратно промежуточному программному обеспечению, и, наконец, промежуточное программное обеспечение передает этот ответ клиенту. Если вы хотите реализовать 3-уровневую архитектуру, вы можете хранить любое промежуточное программное обеспечение, такое как Web Logic или WebSphere, между вашим веб-сервером и веб-браузером.

Типы Сервера

Существует два типа серверов:

  • Итеративный сервер — это самая простая форма сервера, где серверный процесс обслуживает одного клиента и после завершения первого запроса принимает запрос от другого клиента. Тем временем другой клиент продолжает ждать.

  • Параллельные серверы — этот тип сервера запускает несколько параллельных процессов для одновременного обслуживания множества запросов, поскольку один процесс может занять больше времени, а другой клиент не может ждать так долго. Самый простой способ написать параллельный сервер под Unix — это запустить дочерний процесс для обработки каждого клиента в отдельности.

Итеративный сервер — это самая простая форма сервера, где серверный процесс обслуживает одного клиента и после завершения первого запроса принимает запрос от другого клиента. Тем временем другой клиент продолжает ждать.

Параллельные серверы — этот тип сервера запускает несколько параллельных процессов для одновременного обслуживания множества запросов, поскольку один процесс может занять больше времени, а другой клиент не может ждать так долго. Самый простой способ написать параллельный сервер под Unix — это запустить дочерний процесс для обработки каждого клиента в отдельности.

Как сделать клиент

Системные вызовы для установления соединения несколько различаются для клиента и сервера, но оба включают базовую конструкцию сокета. Оба процесса устанавливают свои собственные сокеты.

Шаги, связанные с установкой сокета на стороне клиента, следующие:

  • Создайте сокет с помощью системного вызова socket () .

  • Подключите сокет к адресу сервера с помощью системного вызова connect () .

  • Отправлять и получать данные. Есть несколько способов сделать это, но самый простой способ — использовать системные вызовы read () и write () .

Создайте сокет с помощью системного вызова socket () .

Подключите сокет к адресу сервера с помощью системного вызова connect () .

Отправлять и получать данные. Есть несколько способов сделать это, но самый простой способ — использовать системные вызовы read () и write () .

Как сделать сервер

Шаги, связанные с установкой сокета на стороне сервера, следующие:

  • Создайте сокет с помощью системного вызова socket () .

  • Свяжите сокет с адресом, используя системный вызов bind () . Для сокета сервера в Интернете адрес состоит из номера порта на хост-компьютере.

  • Прослушайте соединения с помощью системного вызова listen () .

  • Принять соединение с помощью системного вызова accept () . Этот вызов обычно блокирует соединение, пока клиент не соединится с сервером.

  • Отправка и получение данных с использованием системных вызовов read () и write () .

Создайте сокет с помощью системного вызова socket () .

Свяжите сокет с адресом, используя системный вызов bind () . Для сокета сервера в Интернете адрес состоит из номера порта на хост-компьютере.

Прослушайте соединения с помощью системного вызова listen () .

Принять соединение с помощью системного вызова accept () . Этот вызов обычно блокирует соединение, пока клиент не соединится с сервером.

Отправка и получение данных с использованием системных вызовов read () и write () .

Взаимодействие клиента и сервера

Ниже приведена диаграмма, показывающая полное взаимодействие клиента и сервера.