Веб-узлы 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