Клиент-серверное приложение разбито на два составляющих процесса:
- клиент, который просит сервер о какой-либо услуге, отправив ему сообщение с запросом;
- сервер, который изучает запрос клиента, выполняет соответствующие действия, а затем отправляет назад клиенту сообщение с ответом.
Иногда клиент и сервер могут быть вовлечены в расширенный диалог из запросов и ответов.
Обычно клиентское приложение взаимодействует с пользователем, а серверное приложение предоставляет доступ к некоторому совместно используемому ресурсу. Чаще всего обменом данными с одним или несколькими серверными процессами занимается несколько клиентских процессов.
Клиент и сервер могут находиться на одном и том же ведущем компьютере или на отдельных хостах, соединенных по сети. Для взаимного обмена сообщениями клиент и сервер используют IPC-механизмы.
Серверы могут реализовывать различные сервисы, например:
- предоставление доступа к базе данных или другому совместно используемому информационному ресурсу;
- предоставление доступа к удаленному файлу по сети;
- инкапсуляция какой-нибудь бизнес-логики;
- предоставление доступа к совместно используемым аппаратным ресурсам (например, к принтеру);
- обслуживание веб-страниц.
Инкапсуляция сервиса на отдельном сервере имеет смысл по нескольким причинам, в числе которых следующие.
- Рентабельность. Предоставление одного экземпляра ресурса (например, принтера), управляемого сервером, может быть проще предоставления того же самого ресурса локально каждому компьютеру.
- Управление, координация и безопасность. При содержании ресурса (особенно информационного) в одном месте сервер может координировать доступ к ресурсу (например, так, чтобы два клиента не могли одновременно обновлять один и тот же блок информации) или обеспечить его безопасность таким образом, чтобы он был доступен только избранным клиентам.
- Работа в разнородной среде. В сети различные клиенты и сервер могут быть запущены на различном оборудовании и на разных платформах операционных систем.