Почему websocket не работает в облаке?

Я разработал наш проект websocket на wildfly. Когда мы тестируем его на локальном хосте или в нашей локальной сети, все работает нормально. Но когда я развернул его на AWS, websocket больше не работает. Мы можем получить доступ к другим HTML-страницам. Но когда мы подключаемся к "ws://ip/project location ", chrome просто говорит об ошибке рукопожатия. Я испытывал ту же проблему с веб-сокетом на jelastic хостинге. Мой вопрос

  1. Почему так происходит?
  2. Протокол websocket недостаточно стабилен?
  3. Есть ли подходящий java хостинг для проектов websocket?

3 ответа

В настоящее время ELB не поддерживает Websocket в режиме HTTP. Чтобы иметь возможность обрабатывать Websocket, вам необходимо настроить ELB в режиме tcp (полезная нагрузка соединения tcp будет отправлена ​​непосредственно на сервер, поэтому ELB не влияет на поток http и ws). С этой настройкой вы не сможете видеть вызывающий IP.

Без ELS Websocket работает отлично (AWS видит только трафик ip, а ОС только tcp one), мы ничего не изменили для простого старого http-сервера, чтобы использовать WS (кроме кода обработки WS на веб-сервере).

Чтобы узнать, используете ли вы ELB, посмотрите на счет, AWS может предоставить вам очень интересные услуги за плату.

До сих пор балансировщики не пересылают заголовки websocket. Чтобы WS работал, у вас должен быть общедоступный IP-адрес и никакие другие службы перед вашим приложением.

Я предлагаю вам попробовать развернуть у поставщика облачных услуг: Heroku - их пример кода приложения с использованием node.js и websockets поможет вам быстро приступить к работе. Локально работающее приложение websocket, которое использует определенный порт - скажем, 8888 будет хорошо работать на heroku с:

var port = process.env.PORT || 8888;

поскольку heroku внутренне развернет ваше приложение с портом, генерируемым во время выполнения, видимым через PORT . Если вы используете node.js с веб-сокетами, я предлагаю использовать реализацию einaros ws

var WebSocketServer = require("ws").Server;

который легко обрабатывает понятие порта ws -vs- порта http

Другие вопросы по тегам