Как стать автором
Обновить

WebSocket для начинающих системных аналитиков: просто о сложном. Часть 1

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров1.4K

Меня зовут Юля, я системный аналитик в компании EvApps. Эта статья для начинающих системных аналитиков, которые хотят понять основы WebSocket.

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

В этой статье, я простыми словами расскажу, что такое WebSocket, и почему вам, как начинающему системному аналитику, важно знать о них.

Немного истории: когда и зачем появились WebSocket?

В ранние годы развития веба, одним из основных протоколов передачи данных был HTTP. 
Его работа строилась по принципу “запрос-ответ”: клиент запрашивает информацию, сервер отправляет запрашиваемую страницу целиком, после чего соединение закрывается.
Например, ты заходишь на сайт-визитку. Кликаешь по страницам, и каждая грузится заново.
HTTP идеален для “статического контента” (блогов, справочников).

Простой и масштабируется хорошо. Не требует постоянного соединения и экономит ресурсы.

Потом появилась технология AJAX.
Она сделал сайты живее, без полных перезагрузок.
Как это работает? Браузер отправляет запрос, а сервер присылает только нужные данные. JavaScript быстренько обновляет кусок страницы. Например, в ленте новостей подгружаются новые посты.
AJAX - это “юзабилити”, страница не “мигает”.
Трафик экономится - передается только то, что изменилось. Подходит для сайтов, где нужны мгновенные обновления (интернет-магазины).
Фильтруешь товары, страница не перезагружается, а товары подгружаются.

А потом появились веб-приложения, которым нужен постоянный обмен данными (онлайн-чаты, игры). Для этого HTTP и AJAX уже не подходили, так как они основаны на принципе “запрос-ответ” для которых, требуется постоянная отправка запросов от клиента, даже при отсутствии новых данных. Это создает излишнюю нагрузку на сервер и сеть, и затрудняет создание по-настоящему “реального времени”.

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

HTTP — это фундамент дома: без него нельзя начать строительство.  

AJAX — окна и двери: делают дом удобным для жизни.  

WebSocket — электричество и водопровод: обеспечивают мгновенный доступ к ресурсам. 

Почему все они не конкуренты, а партнеры?

Современные приложения часто используют все три подхода:
HTTP - для загрузки основной структуры страницы.
AJAX - для динамического обновления контента (подгрузка комментариев).
WebSocket - для мгновенных уведомлений или чата.

Каждый протокол - ответ на конкретные вызовы своего времени.
Использовать их нужно там, где они наиболее эффективны.

Вернемся к WebSocket, статья же про них.

WebSocket: зачем они вообще нужны?

Если честно, до определенного момента я считала, что HTTP вполне достаточно для всего. Впервые я с ними столкнулась при разработке платформы для колл-центра.

Информация о принятых звонках и чатах требует моментального обновления. Я поняла, что HTTP — это как отправлять почту голубями. Каждый раз, когда нужно обновить данные, нужно отправлять новый запрос. Это неэффективно и не подходит для приложений, где требуется постоянное общение.

Это было моё первое знакомство с вебсокетами.

Что такое  WebSocket и как он работает?

WebSocket - это как мост между клиентом и сервером, который позволяет им обмениваться данными в реальном времени.

Все мы имеем представление, как примерно выглядит разводной мост.
Рассмотрим на его примере, как работают вебсокеты.
Пока мост разведен (соединение между клиентом и сервером не установлено), пешеходы и автомобили не могут попасть с одного берега  на другой (обмен данными невозможен).

  1. Установление соединения.
    Представьте, что мост смыкается. Соединение WebSocket начинается с обычного HTTP-запроса, в который включается заголовок Upgrade,сообщающий о желании перейти на протокол Websocket. Этот процесс называется Websocket-handshake или «рукопожатие» клиента и сервера. Они как бы получают разрешение и согласовывают правила для установления постоянного, двустороннего соединения. Это как получение одобрения, перед тем, как по мосту начнут ездить машины. 

  2. Обмен данными.
    После успешного “рукопожатия” мост надежно соединяется, устанавливается постоянное соединение и данные могут передаваться в реальном времени в обе стороны без необходимости отправлять новый запрос. Люди и авто могут непрерывно переходить этот мост в обе стороны в любой момент.

  3. Закрытие соединения.
    Когда мост разводится (соединение закрывается), пешеходы и автомобили больше не могут переходить мост.

WebSocket создаёт постоянное соединение между вашим браузером и сервером, в отличие от HTTP, который требует новый запрос для каждой операции. Это похоже на проложенный кабель между вашим компьютером и сервером, по которому данные могут передаваться в любое время без лишних запросов.

WebSocket vs HTTP:  в чём разница для аналитика?

Основное отличие - это способ обмена данными.

Сравним их.
Как работает WebSocket

  1. Рукопожатие (handshake): Сначала клиент (браузер или приложение) отправляет запрос на установку соединения через HTTP. Это "рукопожатие" говорит: "Привет, я хочу общаться через вебсокеты". 

  2. Соединение: Сервер отвечает: "Хорошо, устанавливаем канал". И все — устанавливается постоянное TCP-соединение. После успешного handshake, WebSocket переходит на собственный протокол (ws:// или wss://). И это означает, что для передачи данных HTTP больше не используется.

  3. Обмен данными: Теперь можно обмениваться данными в обе стороны. Больше никаких лишних запросов!

Как работает HTTP:
Связь между клиентом и сервером состоит, из отдельных запросов и ответов, выполняемых внутри TCP соединений - они закрываются через некоторое время и их снова нужно открывать.
Клиент должен постоянно спрашивать, если ли новое сообщение. А сервер - тратить ресурсы на ответы “Нет”.

Когда использовать WebSocket, а когда достаточно HTTP и AJAX?

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

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

Еду домой после долгого рабочего дня. Хочется, чтобы всё было как по мановению волшебной палочки — свет включился, температура настроилась, любимая музыка заиграла. С HTTP мне бы пришлось каждый раз нажимать кнопку "обновить" в приложении, чтобы убедиться, что все мои команды выполняются. Это был бы совсем не умный дом.

А вот с WebSocket всё по-другому. Это как протянуть невидимый провод от моего телефона к каждому устройству в доме. Как только я что-то меняю в приложении, команда тут же отправляется на устройство, и результат сразу же виден. Больше никаких мучительных ожиданий!

Почему WebSocket — это круто (а где они могут создать проблемы)?

Преимущества:

  • Мгновенный отклик: Это самое главное. Данные передаются почти мгновенно. Это как раз то, что нужно для чатов, онлайн-игр, финансовых приложений, колл-центров.

  • Экономия ресурсов: Меньше лишних запросов — меньше нагрузка на сервер. Это важно, когда у вас много пользователей.

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

Недостатки:

  • Сложности настройки: Вебсокеты сложнее настроить по сравнению с HTTP. Особенно это касается работы с прокси-серверами.

  • Постоянное соединение: Может создавать нагрузку, если у вас очень много одновременных подключений. В таких случаях нужно правильно настраивать сервер.

Где сталкиваемся с вебсокетами каждый день?

  • Чаты и мессенджеры: Без них никуда. Мы используем вебсокеты, чтобы сделать общение более удобным.

  • Программы для совместной работы: Чтобы графики и диаграммы обновлялись в реальном времени

  • Навигаторы: Получение информации о пробках, маршрутах в реальном времени

  • Умный дом и IoT: Управление устройствами и получение уведомлений

  • Онлайн-игры: Для синхронизации игровых действий между игроками в реальном времени

  • Финансовые приложения и биржевые платформы: Для отображения изменений цен на акции, криптовалюты и другие активы

  • Колл-центры и CRM-системы: Для мгновенного обновления данных о звонках, чатах и статусах клиентов

  • Онлайн образование и вебинары: Для интерактивного взаимодействия между преподавателями и студентами

  • Системы мониторинга и аналитики

  • Стриминговые платформы

  • и этот список можно ещё продолжить)

Почему знание о WebSocket важно для системного аналитика?

  • Выбор технологии: Знание WebSocket позволяет аналитику обосновано выбирать технологию, учитывая её преимущества и ограничения по сравнению с другими протоколами и технологиями.

  • Это поможет правильно описывать требования: Знание  WebSocket позволяет корректно формулировать требования к системам, где важен обмен данными в реальном времени.

  • Поможет анализировать производительность: Аналитику необходимо понимать как WebSocket влияют на производительность и масштабируемость систем, особенно при обработке большого количества соединений.

  • Так легче тестировать: Аналитик нужно уметь проверять работоспособность WebSocket, используя инструменты вроде Postman, чтобы убедиться в корректной передаче данных.

  • Это поможет дать оценку безопасности: Понимание особенностей безопасности WebSocket позволит аналитику оценить риски и определить необходимые меры предосторожности для защиты данных и обеспечения конфиденциальности.

Заключение: WebSocket — это мощный инструмент

WebSocket — не «серебряная пуля» и его стоит применять точечно, там, где их преимущества перевешивают затраты:  

✅ Использовать, если нужна постоянная двусторонняя связь в реальном времени.  

❌ Не использовать, если задача решается через HTTP/AJAX. 

Теперь у вас есть общее представление о WebSocket. Но, возможно, у вас возникли вопросы: “Как именно происходит обмен данными? Как убедиться, что WebSocket-соединение безопасно? Как WebSocket влияет на производительность сервера?”
Ответы на эти и другие вопросы вы найдете во второй части статьи, где рассмотрим WebSocket с технической точки зрения и разберем практические примеры анализа трафика.

Надеюсь, эта статья будет полезна! Если есть вопросы, пишите в комментариях!

Теги:
Хабы:
+6
Комментарии0

Публикации

Истории

Ближайшие события

25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань