Skip to content

Instantly share code, notes, and snippets.

@Khazbs
Last active October 4, 2020 10:34
Show Gist options
  • Save Khazbs/0be52e489d5ac086ea82dd0718786ecb to your computer and use it in GitHub Desktop.
Save Khazbs/0be52e489d5ac086ea82dd0718786ecb to your computer and use it in GitHub Desktop.
Объяснение клиента и сервера

Що це таке: клієнт і сервер?

Пример из жизни

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

Ржумен одобряет годный мемас

Схема взаимодействий

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

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

Пример клиент-серверных взаимомемствий

Как это работает?

Для того, чтобы клиент мог получить от сервера то, что ему нужно, клиент должен знать, по какому адресу можно обратиться к этому серверу. В связи с этим сервера в сети часто имеют постоянный IP-адрес и / или удобное доменное имя, которое любой нормальный человек в состоянии запомнить (например, vk.com, pikabu.ru, google.com). При этом сервер не всегда должен знать адрес клиента, ведь от него требуется просто дать клиенту то, что он хочет, раз тот уже сам к нему обратился. (Это работает по аналогии с тем, как сотрудник компании не должен знать наизусть телефонные номера всех звонящих ему клиентов, а вот клиенту для совершения звонка знать телефон компании необходимо.)

Наиболее распространенная схема взаимодействия клиента и сервера в сети — "запрос-ответ". Клиент по сети подключается к серверу, совершает запрос необходимой ему информации или действия (например, "получить ленту новостей" или "лайкнуть такой-то пост"). Затем сервер решает, что нужно делать (получить нужные посты из базы данных, добавить пост в понравившиеся) и отправляет клиенту ответ — результат своих действий. После этого запрос считается обработанным, и соединение между клиентом и сервером можно разорвать.

Существуют также и другие схемы взаимодействия, например, веб-сокеты. В такой схеме соединение между клиентом и сервером не разрывается, а остается активным. Веб-сокеты позволяют серверу и клиенту обмениваться информацией в обе стороны, что может быть полезно, например, в некоторых играх (Doka 2, CS:GO), где действия должны происходить в реальном времени, и сервер должен иметь возможность сразу сообщать клиенту (то есть установленной на компьютер игре) о произошедших на поле боя событиях.

Игра Doka 2

Некоторые тонкости

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

Лупа и Пупа в образах Вупсеня и Пупсеня соответственно

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

Подведем итоги

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

Клиент — это программа, позволяющая пользователю пользоваться теми сервисами, которые предоставляет сервер, на его планшете / смартфоне / компьютере / умном холодильнике / смарт-часах. Также клиентом можно назвать и само устройство, на которое устанавливается эта программа.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment