Веб-сокеты

А теперь посмотрим на саму доставку сообщения получателю. 

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

Примеры использования:

  • Чаты и мессенджеры.
  • Реальное время обновления данных (например, финансовые тикеры).
  • Игры.

В каждой из этих ситуаций важно бесперебойное обновление данных между системой и клиентом.

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

  • Немедленная доставка данных — передаются сразу после их генерации.
  • Эффективность — нет накладных расходов на установку соединения при каждом запросе.

Недостатки:

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

Важные моменты для поддержания стабильности системы и хорошего UX:

  • Постоянное соединение. Если на какой-то стороне плохое соединение, то соединение будет разрываться и заново инициироваться.
  • Scalability (масштабируемость). При большом количестве открытых соединений серверу сложно поддерживать нагрузку, особенно если клиенты активно отправляют данные — да, мы про это уже говорили, но обращу твое внимание еще раз (НАСТОЛЬКО это важно).

ЕЩЕ ВАЖНОЕ: Горизонтальное масштабирование WebSocket значительно сложнее, чем обычный REST запрос на какой-нибудь просмотр поста в ленте или сторис, так как при этом нужно понимать, на какой сервер направлять запросы. Смотрим на архитектуру ниже:

Так как мы делаем stateless backend (то есть приложение не хранит инфу), то для отправки сообщения нам не нужен web socket, а достаточно REST поверх HTTP. А вот для получения сообщения нам нужен веб-сокет.