Статьи

Создавайте более эффективные приложения с расширенной поддержкой WebSockets

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

Используя WebSockets, вы можете получить следующие преимущества:

  • Сокращение задержек ответа и ненужного потребления сетевого трафика благодаря полнодуплексному распределению через одно соединение
  • Потоковая передача через прокси-серверы и брандмауэры, как вверх, так и вниз по течению
  • Обратная совместимость с миром до WebSocket, путем переключения с HTTP-соединения на WebSockets

Jelastic предоставляет вам расширенную и дополненную поддержку WebSockets посредством интеграции этой технологии в узел Jelastic Shared Resolver и NGINX-балансировщик , так что вы можете использовать его даже без внешнего IP-адреса, подключенного к вашему серверу приложений.

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

А в приведенном ниже руководстве вы узнаете, как настроить поддержку WebSockets для вашего приложения, размещенного в Jelastic Cloud, с помощью узла NGINX-балансировщика . В качестве примера мы будем использовать простое приложение для чата, написанное на PHP. Итак, начнем и будем двигаться шаг за шагом с самого начала.

Создание среды и развертывание приложений

1. Войдите в панель управления Jelastic со своими учетными данными и нажмите кнопку « Новая среда» в левом верхнем углу.

2. В появившемся фрейме Environment Topology вам необходимо создать соответствующую среду в соответствии с требованиями вашего приложения (например, мы выбрали сервер приложений Apache для нашего приложения PHP ). Единственный обязательный элемент — узел балансировки NGINX .

Затем установите ограничения использования ресурсов для выбранных узлов с помощью ползунков облачных вычислений, введите имя среды (например, balancer-websockets ) и нажмите « Создать» .

image11

3. Через несколько минут ваша новая среда появится на панели инструментов.

4. Загрузите и разверните свое приложение в нужном контексте (мы будем использовать ROOT по умолчанию ), используя архив / URL или через удаленный репозиторий VCS — ссылку на соответствующую инструкцию можно найти в нашем Руководстве по развертыванию .

После этого имя источника проекта появится в столбце « Развернутая панель».

image02

Конфигурации балансировщика NGINX

Теперь вам нужно изменить настройки прокси-сервера по умолчанию на вашем сервере NGINX-балансировщика, чтобы определить, куда следует перенаправлять входящие запросы и включить потоковую передачу WebSockets.

1. Перейдите на вкладку Configuration Manager, нажав кнопку « Config» для вашего узла балансировщика.

image05

2. Затем откройте файл nginx-jelastic.conf в каталоге conf , найдите блок location в первом разделе кода сервера и вставьте перед ним следующие строки:

location /ws/ {
   proxy_pass http://{appserver_ip}:{port};
   proxy_http_version 1.1;
   proxy_set_header Upgrade $http_upgrade;
   proxy_set_header Connection "upgrade";
}

Где:

{appserver_ip} — IP-адрес узла сервера приложений с развернутым приложением WebSockets. Его можно найти, нажав кнопку « Дополнительно» для требуемого экземпляра.

image08

{порт} — номер порта, прослушиваемого вашим приложением

В нашем случае необходимые настройки будут выглядеть как на изображении ниже:

image04

Примечание: обратите внимание, что обычно мы рекомендуем изменить конфигурации в файле nginx.conf и оставить содержимое файла nginx-jelastic.conf в качестве настроек по умолчанию / резервного копирования. Но в этом случае, поскольку требуемые изменения довольно просты, и мы уверены, что знаем, что делаем, будет проще работать напрямую с файлом nginx-jelastic .

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

image01

Конфигурации приложения

Как только поддержка WebSockets включена, остается только настроить приложение. Вам необходимо настроить его код аналогично приведенным ниже шагам, чтобы указать правильную строку подключения в соответствии с расположением нового файла WebSocket:

  1.  Нажмите кнопку Config рядом с выбранным сервером приложений.

image12

2. На открытой вкладке Configuration Manager вы можете получить доступ к файлам вашего приложения, перейдя в папку webroot / ROOT (или имя последней может отличаться, если вы указали свой пользовательский контекст во время развертывания приложения).

Откройте файл с указанными настройками WebSockets и настройте путь ws в соответствии со следующим форматом:

ws://{env_domain}{path_to_ws_file}

При этом значение {env_domain} должно быть заменено вашим доменом среды (его можно увидеть под именем среды на приборной панели), а значение {path_to_ws_file} должно указывать на файл, к которому необходимо получить доступ при установлении соединения WebSockets.

Например, в нашем случае эта строка выглядит следующим образом:

image07

Не забудьте сохранить выполненные изменения.

3. Наконец, перезапустите сервер приложений с помощью соответствующей кнопки, чтобы применить новые конфигурации.

image10

4. Как только служба снова заработает, вы можете нажать Открыть в браузере рядом с вашей средой и получить доступ к вашему приложению.

image06

5. Отлично, мы сделали!

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

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

Единственным исключением является GlassFish , поскольку для активации поддержки WebSockets требуются некоторые конфигурации на стороне сервера  .

Соответствующие примеры конфигурации доступны в нашей документации здесь .

Если вы хотите проверить преимущества использования веб-сокетов с Jelastic, просто подпишитесь на двухнедельную бесплатную пробную версию и поделитесь своим опытом в комментариях ниже

В этом посте описывается более сложное решение, а более простой метод показан в следующей статье —  поддержка Websockets для Apache и NGINX для PHP, Ruby и Node.js.

Обязательно подпишитесь на наш блог, чтобы не пропустить информативный новый контент.