Веб-узлы Heroku с Java ECONNREFUSED (соединение отклонено)
Я пишу небольшой игровой сервер, использующий Java.
Я использую библиотеку TooTallNate-Java-Websockets для создания моего сервера websocket.
Все работает, когда я запускаю свой сервер на локальном хосте, я могу подключиться к нему со всего мира. Однако, когда я отправляю свое приложение в Heroku, каждый раз, когда я пытаюсь установить соединение сокета, я получаю сообщение об ошибке ECONNREFUSED (соединение отклонено).
Стоит упомянуть, что когда я запускаю свое приложение с мастером, который должен эмулировать среду герою, все работает так, как должно быть.
В качестве порта для моего сервера websocket я попытался использовать 8080 и многие другие в диапазоне от 5000 до 8000.
Я могу только догадываться, что там происходит на heroku, поскольку журналы содержат только базовую информацию о http-запросах.
Пожалуйста, помогите, я близок к сдаче: (
ИЗМЕНИТЬ
Вот что я имею в файле Proc:
web: ./build/install/my-app/bin/my-app
UPDATE
Создал простую абстракцию, чтобы продемонстрировать проблему:
(Разумеется, протестирован в бригадире, и он работает в локальной среде)
- Мой тестер html/js: Testerpage
- My Main java Jetty server: Главная страница Java
- Сообщение об ошибке консоли:
WebSocket connection to 'wss://test-websocket-yan.herokuapp.com:39773/' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED
Ответы
Ответ 1
Я отвечаю на свой вопрос, чтобы поделиться тем, как мне удалось подключиться к серверу Java websocket на Heroku.
- Создайте свой сервер веб-сокетов с помощью Java, реализация зависит от вас, вы можете использовать веб-сайты javax или Jetty или TooTallNate-Java-Websockets, Я использовал Jetty. Вот моя реализация. Я использовал этот пример.
- При подключении к веб-сокете на героку используйте следующую схему ws://+ yourHerokuAppAdress + yourSocketEndpoint. Конечная точка - это относительный адрес, который прослушивает ваш веб-узел, в моем случае это "/socket" . Нет необходимости указывать порт!
Ответ 2
Вы должны использовать порт, который Heroku устанавливает как $PORT
env var:
В Heroku приложения полностью автономны и не полагаются на инсталляцию веб-сервера во время выполнения в среду выполнения, чтобы создать веб-интерфейс. Каждый веб-процесс просто привязывается к порту и прослушивает запросы, поступающие на этот порт. Порт для привязки назначается Heroku в качестве переменной окружения PORT.
Подробнее см. https://devcenter.heroku.com/articles/runtime-principles#web-servers