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